【发布时间】:2014-08-26 12:41:09
【问题描述】:
我发现这种理解非常适合扁平化列表:
>>> list_of_lists = [(1,2,3),(2,3,4),(3,4,5)]
>>> [item for sublist in list_of_lists for item in sublist]
[1, 2, 3, 2, 3, 4, 3, 4, 5]
我比使用itertools.chain() 更喜欢这个,但我就是无法理解。我试过用括号括起来的部分,看看我是否可以降低复杂性,但现在我更困惑了:
>>> [(item for sublist in list_of_lists) for item in sublist]
[<generator object <genexpr> at 0x7ff919fdfd20>, <generator object <genexpr> at 0x7ff919fdfd70>, <generator object <genexpr> at 0x7ff919fdfdc0>]
>>> [item for sublist in (list_of_lists for item in sublist)]
[5, 5, 5]
我觉得我很难理解,因为我不太了解发电机的工作原理......我的意思是,我以为我做到了,但现在我很怀疑。就像我说的,我喜欢这个成语的简洁性,这正是我所需要的,但我讨厌使用我不理解的代码。
谁能解释这里到底发生了什么?
【问题讨论】:
-
您好!今天有没有什么改变让你选择了一个不同的接受答案?只是想了解;接受标记完全是您的选择!这么长时间后看到它改变有点罕见:-)
-
呃,老实说我不确定?我想我是从一些收到 SO 徽章的人那里被引导到这里的,并且可能不小心点击了不同的接受标记。
-
酷,感谢您的回复!我总是尽量让我的答案尽可能有帮助,如果我达到目标,接受标记是一个很好的指标。 :-)
标签: python list generator list-comprehension