zfz*_*zfz 7 python tuples list generator
有一个列表:nodes = [20,21,22,23,24,25].
我使用两种方法来生成新的二维对象:
tour1 = (((a,b) for a in nodes )for b in nodes)
tour2 = [[(a,b) for a in nodes ]for b in nodes]
Run Code Online (Sandbox Code Playgroud)
tour1的类型是生成器,而tour2是列表:
In [34]: type(tour1)
Out[34]: <type 'generator'>
In [35]: type(tour2)
Out[35]: <type 'list'>
Run Code Online (Sandbox Code Playgroud)
我想知道为什么tour1不是一个元组?谢谢.
eca*_*mur 10
元组的语法不是括号(),而是逗号,.您可以创建一个没有括号的元组:
x = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
如果你想从理解中创建一个元组,只需使用tuple构造函数:
tuple(tuple((a,b) for a in nodes )for b in nodes)
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 10
根本区别在于第一个是生成器表达式,第二个是列表推导.前者仅在需要时产生元素,而后者在运行理解时总是产生整个列表.
有关详细信息,请参阅生成器表达式与列表理解
在Python中没有"元组理解"这样的东西,这是你似乎期望从第一个语法.
如果你想tour1变成一个元组元组,你可以使用以下代码:
In [89]: tour1 = tuple(tuple((a,b) for a in nodes )for b in nodes)
In [90]: tour1
Out[90]:
(((20, 20), (21, 20), (22, 20), (23, 20), (24, 20), (25, 20)),
((20, 21), (21, 21), (22, 21), (23, 21), (24, 21), (25, 21)),
((20, 22), (21, 22), (22, 22), (23, 22), (24, 22), (25, 22)),
((20, 23), (21, 23), (22, 23), (23, 23), (24, 23), (25, 23)),
((20, 24), (21, 24), (22, 24), (23, 24), (24, 24), (25, 24)),
((20, 25), (21, 25), (22, 25), (23, 25), (24, 25), (25, 25)))
Run Code Online (Sandbox Code Playgroud)
因为语法(x for x in l)是所谓的"生成器表达式":请参阅http://docs.python.org/2/reference/expressions.html#generator-expressions