0

多次元配列を取得して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]

ありがとう

4

2 に答える 2

3
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

ただし、大きなリストの場合、値をメモリに格納するリストとは異なり、ジェネレータ関数は次の値が計算されるまで計算しないため、はるかに効率的です。

于 2013-01-10T02:35:04.413 に答える
1

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

私はこのコードをテストしませんでしたが、アイデアはそこにあります。

于 2013-01-10T02:34:31.763 に答える