【发布时间】:2020-09-27 22:44:57
【问题描述】:
使用 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() 之间的区别感到困惑,并希望深入了解幕后发生了什么。
搜索给了我this question on lists and tuples,它没有回答我的问题。
编辑:The zip() function in Python 3 上的建议问题是非常有用的背景,但没有解决我的问题中关于 列表理解 和 列表文字之间的区别的混淆, em> 所以我更喜欢下面提交的答案更完整。
【问题讨论】:
-
这能回答你的问题吗? The zip() function in Python 3
-
[zip([1,2,3], [3,1,4])]不是列表理解。这是一个具有单个元素的列表文字,您通过评估表达式zip([1,2,3], [3,1,4])获得的值当然是zip对象 -
[x]仅表示“包含 x 的列表”,而list(x)表示“包含 x 元素的列表”。它们不可互换(而且它们都不是列表理解)。 -
list(x)的等效项是[*x],而不是[x]。试试[*zip([1,2,3], [3,1,4])]。 -
[*x]不是列表理解。这是一个包含*x的列表,意思是“解压x的项目”。[*x]将为您提供与list(x)相同的结果。列表理解总是包含单词for和in。
标签: python python-3.x