我发现这种理解非常适用于展平列表列表:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
我喜欢这比使用更好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]
Run Code Online (Sandbox Code Playgroud)
我觉得我很难理解,因为我不太明白发电机是如何工作的......我的意思是,我以为我做了,但现在我真的很怀疑.就像我说的,我喜欢这个成语是多么紧凑,这正是我需要的,但我不愿意使用我不理解的代码.
谁能解释一下究竟发生了什么?