首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python的zip与矩阵转置有本质上的区别吗?

Python的zip与矩阵转置有本质上的区别吗?
EN

Stack Overflow用户
提问于 2018-07-10 04:18:01
回答 1查看 238关注 0票数 4

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

代码语言:javascript
复制
A = [1, 2, 3]
B = [4, 5, 6]
for a, b in zip(A, B):
    print(f"{a}, {b}")

打印输出:

代码语言:javascript
复制
1, 4
2, 5
3, 6

将A和B分别转置,然后将A和B连接起来,就得到了那个精确的矩阵。是否存在两种操作结果不同的情况,或者它们基本上是同一件事?

编辑:*iterables

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-10 04:27:40

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

但是,它稍微更通用一些。

例如,如果您有不相等的列表,您仍然可以对它们进行转置( zip将被截断为最短列表的长度),这并不是真正意义上的“矩阵转置”。

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

另外,请注意文档中的zip(*[iter(s)]*n)分块习惯用法。试图从转置迭代器矩阵的角度来思考这一点只会让人困惑,而不是启发,除非你已经直观地理解了这个习惯用法本身的术语。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51253417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档