列表理解如何工作的解释?
我没有理解这个问题:
a = [1,2,3,4] b = [x for x in a]
我以为这是全部,但后来我发现这个片段:
a = [[1,2],[3,4],[5,6]] b = [x for xs in a for x in xs]
这使得b = [1,2,3,4,5,6]
。 问题是我有麻烦理解[x for xs in a for x in xs]
的语法,任何人都可以解释它是如何工作的?
啊,难以理解的“嵌套”理解。 循环以与理解相同的顺序展开。
[leaf for branch in tree for leaf in branch]
这有助于我们这样想。
for branch in tree: for leaf in branch: yield leaf
PEP202断言这个语法的“最后一个索引变化最快”是“正确的”,特别是没有解释为什么 。
如果a = [[1,2],[3,4],[5,6]]
,那么如果我们展开这个列表comp,我们得到:
+----------------a------------------+ | +--xs---+ , +--xs---+ , +--xs---+ | for xs in a | | x , x | | x , x | | x , x | | for x in xs a = [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] ] b = [ x for xs in a for x in xs ] == [1,2,3,4,5,6] #a list of just the "x"s
b = [x for xs in a for x in xs]
类似于下面的嵌套循环。
b = [] for xs in a: for x in xs: b.append(x)
有效:
...for xs in a...]
正在迭代你的main(外部)列表,并依次返回你的每个子列表。
...for x in xs]
然后迭代这些子列表中的每一个。
这可以被重写为:
b = [] for xs in a: for x in xs: b.append(x)
它可以这样写
result = [] for xs in a: for x in xs: result.append(x)
你可以在这里阅读更多
这是一个嵌套理解的例子。 将a = [[1,2],[3,4],[5,6]]
看作是一个3乘2的matrix(matrix= [[1,2],[3,4],[5,6] ])。
______ row 1 |1 | 2 | ______ row 2 |3 | 4 | ______ row 3 |5 | 6 | ______
你所看到的列表理解是另一种从matrix中获取所有元素的方法。
我将尝试使用不同的variables来解释这个问题,这将有希望变得更有意义。
b = [element for row in matrix for element in row]
第一个for循环遍历matrix内的行,即[1,2],[3,4],[5,6]
。 第二个for循环遍历2个元素列表中的每个元素。
我在我的网站http://programmathics.com/programming/python/python-list-comprehension-tutorial/上写了一篇关于List Comprehension的小文章,其中涵盖了与这个问题非常相似的场景。 我还给出了一些Python列表理解的例子和解释。
免责声明:我是该网站的创build者。
b = [x for xs in x for xs]与[
b = [] for xs in a: for x in xs: b.append(x)
为了更好的理解,只需从右到左,依次添加for循环,并创build列表x成为列表的元素。