lil*_*ily -1 python list-comprehension 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>]
Run Code Online (Sandbox Code Playgroud)
但我想得到[(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]]
Run Code Online (Sandbox Code Playgroud)
您正在列表推导表达式中使用生成器表达式:
(float(a[i][j]) for j in range(0,3))
Run Code Online (Sandbox Code Playgroud)
如果你希望它像列表推导一样执行,那么也要使列表理解:
[[float(a[i][j]) for j in range(3)] for i in range(2)]
Run Code Online (Sandbox Code Playgroud)
如果你需要那些是元组,那么你必须明确地调用tuple():
[tuple(float(a[i][j]) for j in range(3)) for i in range(2)]
Run Code Online (Sandbox Code Playgroud)
该tuple()调用将驱动发电机表达以产生这些值的元组.除此之外,没有元组理解这样的东西.
您可以直接循环遍历a嵌套列表,而不是使用范围:
[tuple(float(v) for v in nested) for nested in a]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |