首页 > 解决方案 > 为什么对 zip() 调用的列表理解会返回一个包含 zip 对象的列表,而不是 zip() 的返回值列表?

问题描述

使用 python3 REPL 并注意到以下内容:

为什么print( [zip([1,2,3], [3,1,4])] )print( list(zip([1,2,3], [3,1,4])) )不同?

第一个返回[<zip object at 0xblah>],第二个返回[(1,3), (2,1), (3,4)]

试图理解为什么第一个语句中的列表理解没有给我list()构造函数给出的结果 - 我想我对列表理解之间的区别感到困惑,list()并且希望深入了解引擎盖下发生的事情。

搜索给了我这个关于列表和元组的问题,它没有回答我的问题。

编辑:关于Python 3 中的 zip() 函数的建议问题是非常有用的背景,但没有解决我的问题中关于列表理解列表文字之间区别的混淆,所以我更喜欢下面提交的答案更完整.

标签: pythonpython-3.x

解决方案


第一条语句不是列表推导,列表推导会给您相同的结果。它只是一个包含 zip 对象的列表文字:

这将是一个列表理解:

[value for value in zip([1,2,3], [3,1,4])]

以上将打印与list(zip([1, 2, 3], [3, 1, 4])).


一般来说,[something]意味着:一个包含一个元素的列表:something.

另一方面,list(something)意味着:迭代某事物中的值,并从结果中创建一个列表。例如,您可以通过将原始对象放入其中来查看差异,例如数字:

>>> [2]
[2]
>>> list(2)
TypeError: 'int' object is not iterable

推荐阅读