[英]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.