重複の可能性:
Python でのリストのフラット化 (不規則な) リスト
たとえば、次から:
[[1,2,3],'a',[[4],[5,6],7]]
構造を平坦化/貫通させ、下部にあるすべての要素を 1 行に並べて取得します。
[1,2,3,'a',4,5,6,7]
重複の可能性:
Python でのリストのフラット化 (不規則な) リスト
たとえば、次から:
[[1,2,3],'a',[[4],[5,6],7]]
構造を平坦化/貫通させ、下部にあるすべての要素を 1 行に並べて取得します。
[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
それが正確な理由はわかりません。何か案は?