簡體   English   中英

Python:為什么列表理解會產生一個生成器?

[英]Python: why does list comprehension produce a generator?

a=[['1','3','2'],['11','22','33']]
k = [(float(a[i][j]) for j in range(0,3)) for i in range(0,2)]
>>> print k
[<generator object <genexpr> at 0x7f1a9d568f50>, <generator object <genexpr> at 0x7f1a9d568fa0>]

但是我想得到[(1,3,2),(11,22,33)]為什么列表理解會產生一個生成器?

您在列表推導( [x for x in ...] )內有一個生成器表達式(x for x in ...) )。 這將返回生成器對象列表。 像這樣更改代碼

a = [['1','3','2'],['11','22','33']]
k = [[float(a[i][j]) for j in range(0,3)] for i in range(0,2)]

print(k)
# [[1.0, 3.0, 2.0], [11.0, 22.0, 33.0]]

您在列表理解表達式中使用了生成器表達式:

(float(a[i][j]) for j in range(0,3))

如果你想要一個執行像列表解析,使列表理解

[[float(a[i][j]) for j in range(3)] for i in range(2)]

如果您需要將它們作為元組,則必須顯式調用tuple()

[tuple(float(a[i][j]) for j in range(3)) for i in range(2)]

可調用的tuple()將驅動生成器表達式生成這些值的元組。 否則就沒有元組理解這樣的東西

而不是使用范圍,你可以遍歷a 直接的嵌套列表:

[tuple(float(v) for v in nested) for nested in a]

演示:

>>> a=[['1','3','2'],['11','22','33']]
>>> [tuple(float(v) for v in nested) for nested in a]
[(1.0, 3.0, 2.0), (11.0, 22.0, 33.0)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM