嵌套列表内涵(nested list comprehensions)

2019-06-27 00:18发布

我试着用外部列表理解的值在内部之一:

[ x for x in range(y) for y in range(3) ]

但不幸的是因为这个名字这就提出了一个NameError y是未知的(虽然外部列表理解指定它)。

这是Python的(2.7.3和3.2.3试过)的限制或者是有一个很好的理由,为什么这不能工作?

是否有计划摆脱限制的?

是否有解决方法(一些不同的语法也许我也没弄明白)来实现我想要什么?

Answer 1:

你说的是列表内涵 ,而不是生成器表达式。

你需要换你的for循环:

[ x for y in range(3) for x in range(y) ]

你需要阅读这些,好像他们是嵌套在一个常规的循环:

for y in range(3):
    for x in range(y):
        x

多循环列表推导遵循相同的排序。 请参阅列表理解文档 :

当提供一个列表理解,它由一个单一的表达,随后在至少一个for子句和零个或多个forif条款。 在这种情况下,新的列表的元素是那些将通过考虑每个的产生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]


Answer 2:

你试过了吗:

[x for y in range(3) for x in range(y)]

因为产生输出...这将产生:

[0, 0, 1]

这可能是也可能不是你想要的东西....



Answer 3:

只是窝另一根。

[ x for x in [range(y) for y in range(3) ]]

给我:

[[], [0], [0, 1]]


文章来源: nested list comprehensions