我尝试在内部列表理解中使用外部列表理解的值:
[ x for x in range(y) for y in range(3) ]
但不幸的是,这引发了NameError
因为这个名字y
未知(尽管外部列表理解指定了它)。
这是 Python 的限制(尝试过 2.7.3 和 3.2.3)还是有充分的理由说明它无法工作?
是否有计划摆脱限制?
是否有解决方法(一些不同的语法也许我没有弄清楚)来实现我想要的?
你说的是清单理解力,而不是生成器表达式。
您需要交换 for 循环:
[ x for y in range(3) for x in range(y) ]
您需要像将它们嵌套在常规循环中一样来阅读它们:
for y in range(3):
for x in range(y):
x
具有多个循环的列表推导式遵循相同的顺序。请参阅列表理解文档 http://docs.python.org/reference/expressions.html#list-displays:
当提供列表推导式时,它由一个表达式组成,后跟至少一个for
子句和零个或多个for
or if
条款。在这种情况下,新列表的元素是通过考虑每个元素而生成的元素for
or if
子句一个块,从左到右嵌套,并在每次到达最里面的块时评估表达式以生成一个列表元素。
当然,生成器表达式也是如此,但是它们使用()
括号而不是方括号,并且不会立即具体化:
>>> (x for y in range(3) for x in range(y))
<generator object <genexpr> at 0x100b50410>
>>> [x for y in range(3) for x in range(y)]
[0, 0, 1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)