【问题标题】:How to do python zip() in Javascript?如何在 Javascript 中执行 python zip()?
【发布时间】:2016-01-24 23:33:36
【问题描述】:

我有这个函数,我正在尝试将其转换为 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 时遇到问题。

我不知道怎么翻译。

谁能帮忙?

【问题讨论】:

  • underscore.js 有一个zip 函数。你需要自己写吗?
  • 不要被zip 函数所牵制。您只是想打印出帕斯卡三角形。专注于这个问题并尝试找到其他可以更轻松地转换为 javascript 的实现。
  • 其次@PaulRooney - 采用好的 Python 代码并将其直接翻译成 Javascript 不一定会产生好的 Javascript,就像将最佳实践 C 或 C++ 翻译成 Python 不一定一样提供最佳实践 Python,例如,将最佳实践 Haskell 直接翻译成 Python 很容易产生非常非常糟糕的 Python。

标签: javascript python translate


【解决方案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;
    }
    

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

    http://jsfiddle.net/wfmbdn40/

    【讨论】:

      【解决方案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】:

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

        【讨论】:

        • 这是准确的,但并不能完全解决如何在 Javascript 中执行此操作的问题。
        • 你是对的,但我们不会为他编写代码。我以为他不明白 zip 的作用不足以翻译它,所以我解释了它的作用。
        猜你喜欢
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2021-01-27
        • 2012-12-14
        • 2021-01-13
        • 2015-08-23
        • 2016-12-02
        • 2011-07-16
        相关资源
        最近更新 更多