[英]Why does a list comprehension over a zip() call return a list containing the zip object instead of a list of zip()'s return values?
使用 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() function的建議問題是非常有用的背景,但沒有解決我的問題中關於列表理解和列表文字之間差異的混淆,所以我更喜歡下面提交的答案更完整.
第一條語句不是列表推導,列表推導會給您相同的結果。 它只是一個包含 zip object 的列表文字:
這將是一個列表理解:
[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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.