Explanation of how nested list comprehension works?
我理解这一点没有问题:
1 2 | a = [1,2,3,4] b = [x for x in a] |
我以为就这些,但后来我发现了这段话:
1 2 | a = [[1,2],[3,4],[5,6]] b = [x for xs in a for x in xs] |
这使得
啊,难以理解的"嵌套"理解。循环展开的顺序与理解的顺序相同。
1 | [leaf for branch in tree for leaf in branch] |
这样想会有帮助。
1 2 3 | for branch in tree: for leaf in branch: yield leaf |
PEP202断言"最后一个变化最快的索引"就是"正确的索引",特别是在没有解释原因的情况下。
如果
1 2 3 4 5 | +----------------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 |
1 2 3 4 | b = [] for xs in a: for x in xs: b.append(x) |
有效地:
1 | ...for xs in a...] |
正在遍历主(外部)列表并依次返回每个子列表。
1 | ...for x in xs] |
然后遍历每个子列表。
这可以重写为:
1 2 3 4 | b = [] for xs in a: for x in xs: b.append(x) |
可以这样写
1 2 3 4 | result = [] for xs in a: for x in xs: result.append(x) |
你可以在这里了解更多
这是一个嵌套理解的例子。把
1 2 3 4 5 6 7 | ______ row 1 |1 | 2 | ______ row 2 |3 | 4 | ______ row 3 |5 | 6 | ______ |
您所看到的列表理解是另一种将矩阵中的所有元素放入列表的方法。
我将尝试用不同的变量来解释这一点,希望这更有意义。
1 | b = [element for row in matrix for element in row] |
第一个for循环迭代矩阵ie
我在我的网站http://programmathics.com/programming/python/python-list-understruction-tutorial/上写了一篇关于列表理解的小文章,它实际上涵盖了与这个问题非常相似的场景。我还提供了其他一些关于python列表理解的例子和解释。
免责声明:我是那个网站的创建者。
是的,可以在列表理解中嵌套循环。甚至可以在其中嵌套if语句。
1 2 3 4 5 6 7 8 9 10 | dice_rolls = [] for roll1 in range(1,7): for roll2 in range(1,7): for roll3 in range(1,7): dice_rolls.append((roll1, roll2, roll3)) # becomes dice_rolls = [(roll1, roll2, roll3) for roll1 in range(1, 7) for roll2 in range(1, 7) for roll3 in range(1, 7)] |
我写了一篇关于媒体的短文,解释了清单的理解以及其他一些你可以用Python做的很酷的事情,如果你感兴趣的话,你应该看看:)
列表理解是使用内部for循环生成自己的列表。它们是Python中非常常见的特性,看起来像:
[物品清单中的物品]
好的,很好,但我为什么要用这个?
当您想节省一些空间时,列表理解非常有用。当您只需要快速处理一个列表来对该列表进行一些重复工作时,它们也很方便。如果您了解函数式编程,它们也非常有用,但这是稍后课程的主题(提示提示)。
但是,如果你能做的只是直接通过一个列表,那么列表理解就没有那么有用了。谢天谢地,它们可以在有条件的情况下使用。
B=[X代表X,A代表X,X代表X]与以下相同:
1 2 3 4 | b = [] for xs in a: for x in xs: b.append(x) |
为了更好地理解,只需从右到左依次添加for循环,当它创建时,list x就成为list的元素。
1 2 | a = [[1,2],[3,4],[5,6]] b = [x for xs in a for x in xs] |
在这里,
1 2 3 4 | b = [] for xs in a: for x in xs: b.append(x) |