リストは Python で最も頻繁に使用されるデータ型であり、標準ライブラリには豊富な関数が用意されています。
しかし、多次元リストを 1 次元リストに変換する場合 (需要が多いかどうかはわかりませんが)、便利な関数を見つけるのは実際には簡単ではありません。
Ruby、Mathematica、Groovy の間には flatten があることを知っておく必要があります。
リストの次元が少なく、規則的であれば、比較的扱いやすいです
例:
li=[[1,2],[3,4],[5,6]] print [j for i in li for j in i] #or from itertools import chain print list(chain(*li)) #or a=[[1,2],[3,4],[5,6]] t=[] [t.extend(i) for i in a] print t #or print sum(li,[])
li=[1,[2],[[3]],[[4,[5],6]]] などのより複雑な場合、上記の方法は使いにくいため、はい、変更する必要があります。
構造はツリーのように見え、ディレクトリトラバーサルが考えやすいため、次のようなアプローチがあります:
def flat(tree): res = [] for i in tree: if isinstance(i, list): res.extend(flat(i)) else: res.append(i) return res
もう 1 つの考え方は、ネストされたリストは多数の角括弧のペアにすぎず、中央のリストを削除して文字列に変換するだけです。
def flatten(seq): s=str(seq).replace('[', '').replace(']', '') #当然也可以用正则 return [eval(x) for x in s.split(',') if x.strip()]
その他の方法:
海外のフォーラムで見たのですが、これも再帰的で一行でできます
flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]
from Tkinter import _flatten li=reduce(lambda *x:list(x),range(2,6),[1]) print li print _flatten(li) #Out: #[[[[[1], 2], 3], 4], 5] #(1, 2, 3, 4, 5) #对元组同样适用
ネストされたタプルについてはこれ以上説明する必要はありません。いくつかの変更を加えるだけです
上記の PYTHON によるネストされたリストの平坦化の簡単な実装は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。