多次元配列を取得して1Dリストに入れる方法をPythonで知りたいです。このことはうまくいきます:
a = [[1,2],[3,4]]
sum(a,[])
私はこれを手に入れました:[1,2,3,4]
しかし、私が未知の次元を持つ多次元を持っているか、そのような一定の次元を持っていない場合:
a = [1,[3,4,[5,6,7]]]
これを取得する方法:[1,2,3,4,5,6,7]
ありがとう
多次元配列を取得して1Dリストに入れる方法をPythonで知りたいです。このことはうまくいきます:
a = [[1,2],[3,4]]
sum(a,[])
私はこれを手に入れました:[1,2,3,4]
しかし、私が未知の次元を持つ多次元を持っているか、そのような一定の次元を持っていない場合:
a = [1,[3,4,[5,6,7]]]
これを取得する方法:[1,2,3,4,5,6,7]
ありがとう
def flatten(lis):
for i in lis:
if isinstance(i, collections.Iterable) and not isinstance(i, basestring):
for sub in flatten(i):
yield sub
else:
yield i
この質問に関するクリスチャンの解決策から引用
リストを返したい場合は、次を使用できます。
def flatten(lis):
flat_list = []
for i in lis:
if isinstance(i, collections.Iterable) and not isinstance(i, basestring):
flat_list.extend(flatten(i))
else:
flat_list.append(i)
return flat_list
ただし、大きなリストの場合、値をメモリに格納するリストとは異なり、ジェネレータ関数は次の値が計算されるまで計算しないため、はるかに効率的です。
1つの方法は、再帰を使用することです。次のようなものが機能するはずです。
def flatten_list(l):
new_l = []
for item in l:
if type(item) == type([]):
new_l += flatten_list(item)
else:
new_l.append(item)
return new_l
私はこのコードをテストしませんでしたが、アイデアはそこにあります。