当前位置: 代码迷 >> python >> 如何在 Javascript 中执行 python zip()?
  详细解决方案

如何在 Javascript 中执行 python zip()?

热度:100   发布时间:2023-06-16 14:08:23.0

我有这个功能,我正在尝试将其转换为 javascript。

def pascal(n):
    row = [1]
    k = [0]
    for x in range(max(n,0)):
        print(row)
        row=[l+r for l,r in zip(row+k,k+row)]
    return n>=1

我在使用zip遇到问题。

我不知道如何翻译。

任何人都可以帮忙吗?

我不认为模拟zip是这里的最佳方法。 首先,这是非常低效的 Python 代码,因为它花费了大量时间来创建这些临时列表,以便可以使用zip

function pascal(n) {
    row = [1]
    for (var x = 0; x < n; x++) {
        console.log(row);
        new_row = [1]
        for (var k = 1; k < row.length; k++) {
            new_row.push(row[k-1] + row[k]);
        }
        new_row.push(1);
        row = new_row;
    }
}

这是我的 JavaScript zip函数版本。

它没有任何错误处理......但它将无限的数组作为参数,并将像在 Python 中一样“压缩”它们(在这种情况下,作为数组的数组)。

如果数组的长度不同,则会出错。

function zip() {
    var out = [];
    for (var i = 0; i < arguments[0].length; i++) {
        var item = [];
        for (var j in arguments) {
            item.push(arguments[j][i]);
        }
        out.push(item);
    }
    return out;
}

这是一个演示它的小提琴(将结果打印到控制台):

这是一个像 zip 函数(生成器)这样的 Python 的 JavaScript 实现,您可以提供多个不同长度的数组,并将它们压缩在一起

function* zip(...arrays) {
    let max_len = 0;
    for(let i of arrays){
        if(i.length>max_len){
            max_len = i.length;
        }
    }
    for (let i = 0; i < Math.max(max_len); i++) {
        let temp_arr = [];
        for(let j of arrays){
            temp_arr.push(j[i]);
        }
        yield temp_arr;
    }
}
let arr1 = [1, 2, 3],
    arr2 = [4, 5, 6, 7];
for (let i of zip(arr1, arr2)) {
    console.log(i);
}

需要一堆可迭代对象并将第 n 个元素连接到其他元素。 如果您有两个列表, a带有['a', 'b', 'c']n带有[1, 2, 3] ,则zip(a, n)将是['a', 1] , ['b', 2] , ['c', 3]

  相关解决方案