可能重复:
在 Python 中展平(不规则)列表列表
例如,来自:
[[1,2,3],'a',[[4],[5,6],7]]
我们想要展平/穿透结构并将底部的所有元素列在一行中:
[1,2,3,'a',4,5,6,7]
可能重复:
在 Python 中展平(不规则)列表列表
例如,来自:
[[1,2,3],'a',[[4],[5,6],7]]
我们想要展平/穿透结构并将底部的所有元素列在一行中:
[1,2,3,'a',4,5,6,7]
# a recursive function to flatten arbitrary nested lists into one simple 1D list
def flatten(inlist,outlist):
for e in inlist:
if isinstance(e,list) :
flatten(e,outlist)
else:
outlist.append(e)
这是递归函数的一种做法,:)。这里的“outlist”作为return-list的参考。
必须有更好的结构...
;) 例如:
为了您的利益,这是一个就地修改列表的实现:
def flatten_in_place(seq):
if isinstance(seq, list):
for index, item in reversed(list(enumerate(seq))):
if isinstance(item, list):
seq[index: index + 1] = fil(item)
return seq
else:
return [seq]
用法:
>>> l = [[1, 2], [3, 4], 5, 6, [7, [8, 9]]]
>>> flatten_in_place(l)
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]
有趣的是,timeit 结果 (t = 1,000,000) 表明这比您的实现略快:
flatten_in_place time: 4.88
flatten time: 5.16
我不确定为什么会这样。有任何想法吗?