嵌套列表理解如何工作的解释?

新手上路,请多包涵

我理解这个没有问题:

 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] 中的语法,谁能解释一下它是如何工作的?

原文由 Alvaro Fuentes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 333
2 个回答

啊,难以理解的“嵌套”理解。循环以与理解中相同的顺序展开。

 [leaf for branch in tree for leaf in branch]

这样想是有帮助的。

 for branch in tree:
    for leaf in branch:
        yield leaf

PEP202 断言这种具有“最后一个索引变化最快”的语法是“正确的索引”,特别是没有解释 _原因_。

原文由 wim 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 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

原文由 Adam Smith 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏