我试着用外部列表理解的值在内部之一:
[ x for x in range(y) for y in range(3) ]
但不幸的是因为这个名字这就提出了一个NameError y
是未知的(虽然外部列表理解指定它)。
这是Python的(2.7.3和3.2.3试过)的限制或者是有一个很好的理由,为什么这不能工作?
是否有计划摆脱限制的?
是否有解决方法(一些不同的语法也许我也没弄明白)来实现我想要什么?
我试着用外部列表理解的值在内部之一:
[ 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
多循环列表推导遵循相同的排序。 请参阅列表理解文档 :
当提供一个列表理解,它由一个单一的表达,随后在至少一个
for
子句和零个或多个for
或if
条款。 在这种情况下,新的列表的元素是那些将通过考虑每个的产生for
或者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]
你试过了吗:
[x for y in range(3) for x in range(y)]
因为产生输出...这将产生:
[0, 0, 1]
这可能是也可能不是你想要的东西....
只是窝另一根。
[ x for x in [range(y) for y in range(3) ]]
给我:
[[], [0], [0, 1]]