问题描述
我有这个功能,我正在尝试将其转换为 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
遇到问题。
我不知道如何翻译。
任何人都可以帮忙吗?
1楼
我不认为模拟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;
}
}
2楼
这是我的 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;
}
这是一个演示它的小提琴(将结果打印到控制台):
3楼
这是一个像 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);
}
4楼
需要一堆可迭代对象并将第 n 个元素连接到其他元素。
如果您有两个列表, a
带有['a', 'b', 'c']
和n
带有[1, 2, 3]
,则zip(a, n)
将是['a', 1]
, ['b', 2]
, ['c', 3]
。