删除列表中列表层次结构的最 Pythonic 方式是什么?
也就是说,从
A=[[(1, 1), (2, 2)],[(1, 1), (2, 2), (3, 3)], [(1, 1)]]
至
B=[(1, 1), (2, 2), (1, 1), (2, 2), (3, 3), (1, 1)]
删除列表中列表层次结构的最 Pythonic 方式是什么?
也就是说,从
A=[[(1, 1), (2, 2)],[(1, 1), (2, 2), (3, 3)], [(1, 1)]]
至
B=[(1, 1), (2, 2), (1, 1), (2, 2), (3, 3), (1, 1)]
import operator
reduce(operator.add, A)
或者
reduce(lambda x,y:x+y, A)
使用chain.from_iterable展开嵌套列表更符合 Pythonic
>>> from itertools import chain
>>> list(chain.from_iterable(A))
[(1, 1), (2, 2), (1, 1), (2, 2), (3, 3), (1, 1)]
“最pythonic”可以无休止地争论。我更喜欢嵌套列表理解来展平嵌套列表。
B = [element for sublist in A for element in sublist]
归根结底,请使用对您来说最易读的内容,因为您可能是最经常与您的代码交互的人。
import itertools
a = [[(1, 1), (2, 2)],[(1, 1), (2, 2), (3, 3)], [(1, 1)]]
list(itertools.chain(*a))
查看itertools 模块。很多好东西。