Python的zip从根本上不同于矩阵转置吗?

据我了解,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连接起来,就得到了确切的矩阵。两种操作在结果上是否存在差异,或者它们基本上是同一件事?


慕田峪7331174
浏览 212回答 1
1回答

翻阅古今

在有操作的情况下,您可以将操作描述为矩阵转置zip(*matrix)(或者,在您的示例中,将行存储为列表,并存储在单独的变量中,而不是在列表中zip(a, b))是矩阵转置。(即使matrixora和b是迭代器或某种虚拟序列或惰性序列,也是如此-它基本上尽可能地延迟它们的转置。)但是,它稍微更笼统。例如,如果您有不相等的列表,则仍然可以将zip它们(zip将被截断为最短列表的长度),并且在任何有意义的意义上,这实际上都不是“矩阵转置”。您甚至可以将其与无限长的迭代器一起使用:无需编写即可zip(itertools.count(), a)为您提供与相同的功能。enumerate(a)zip(itertools.islice(itertools.count(), len(a)), a)另外,请注意zip(*[iter(s)]*n)文档中的分块用法。试图以转置迭代器矩阵的方式来思考,只会使人困惑而不是启迪,除非您已经凭直觉理解了该习惯用语。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python