0

重複の可能性:
Python でのリストのフラット化 (不規則な) リスト

たとえば、次から:

[[1,2,3],'a',[[4],[5,6],7]]

構造を平坦化/貫通させ、下部にあるすべての要素を 1 行に並べて取得します。

[1,2,3,'a',4,5,6,7]
4

2 に答える 2

2
# 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 の参照として機能します。

より良い構造があるはずです...

;) 例えば:

于 2012-06-07T23:23:16.813 に答える
0

便宜上、リストをインプレースで変更する実装を次に示します。

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

それが正確な理由はわかりません。何か案は?

于 2012-06-08T00:53:11.280 に答える