Python的zip是否与矩阵转置根本不同?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (182)

据我所知,pythons zip接受一系列迭代器,然后将迭代器返回给包含每个迭代器中一个元素的元组,这样第一个元组将包含每个迭代器中的第一个元素。例如:

A = [1, 2, 3]
B = [4, 5, 6]
for a, b in zip(A, B):
    print(f"{a}, {b}")

打印出来:

1, 4
2, 5
3, 6

分别转置A和B然后连接A和B会产生精确的矩阵。是否存在两种操作结果不同或基本相同的情况?

提问于
用户回答回答于

在有操作的情况下,您可以将操作描述为矩阵转置zip(*matrix)(或者,在您的示例中,将行存储为列表在单独的变量中而不是列表中的列zip(a, b)),即矩阵转置。(这是真的,即使matrix还是ab是迭代器或某种形式的虚拟或懒惰的序列,它基本上调换他们作为懒洋洋地。)

但是,它略胜一筹。

例如,如果你有不相等的列表,你仍然可以将zip它们(zip将被截断到最短列表的长度),并且这在任何有意义的意义上都不是真正的“矩阵转置”。

您甚至可以将它与无限长度的迭代器一起使用:zip(itertools.count(), a)将为您提供相同的功能enumerate(a),而无需您编写zip(itertools.islice(itertools.count(), len(a)), a)

另外,请注意zip(*[iter(s)]*n)文档中的分块习语。试图通过转置迭代器矩阵来考虑这一点只会让人感到困惑而不是启发,除非你已经用自己的术语直观地理解了这个成语。

扫码关注云+社区

领取腾讯云代金券