0

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

すべてのサブリスト名を書かなくても結果を保存する方法はありますか?すべての配列の数字は、私がやりたいことの単なる例です。前もって感謝します。

        _store = []

        _arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        _arr3 = [1, 2, 3, _arr4, 5, 6, 7, 8, 9]
        _arr2 = [1, 2, 3, 4, 5, 6, _arr3, 8, 9]
        _arr = [1, 2, 3, _arr2, 5, 6, 7, 8, 9]

        for _value in _arr:

            #If value is a list get it, go over that list and so on
            if isinstance( _value, list ):

                _store.append(_value)
                _sub_list = _value

                if isinstance( _sub_list, list ):

                    _store.append( _sub_list)
                    _sub_sub_list = _sub_list

                    if isinstance( _sub_sub_list, list ):

                        _store.append( _sub_list)
                        _sub_sub_sub_list = _sub_list

                        #and so on...

        print _store
4

3 に答える 3

3

再帰の使用:

a = [1,2,3]
b = [4,a,5]
c = [6,b,7]

def add_to(input, output):
    for x in input:
        if isinstance(x, list):
            add_to(x, output)
        else:
            output.append(x)

result = []

add_to(c, result) # now result = [6, 4, 1, 2, 3, 5, 7]

出力refを再帰に渡すことの非Python性は、ジェネレーターを使用することで排除できます。

def flatten(input):
    for x in input:
        if isinstance(x, list):
            for y in flatten(x):
                yield y
        else:
            yield x

result = list(flatten(c))
于 2012-11-22T18:37:13.050 に答える
1

リストをJSONにシリアル化してみませんか?

import json
json.dumps(arr)
于 2012-11-22T18:38:20.783 に答える
1

再帰を使用してみることができます:

arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr3 = [1, 2, 3, arr4, 5, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5, 6, arr3, 8, 9]
arr = [1, 2, 3, arr2, 5, 6, 7, 8, 9]

def get_store(array):
    store = []
    for item in array:
        if isinstance(item, list):
            store.extend(get_store(item))
        else:
            store.append(item)
    return store

print get_store(arr)

...出力:

[1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 8, 9, 5, 6, 7, 8, 9]

基本的に、何らかの操作を行っていて、それを継続的にネストまたは繰り返していることに気付いたが、それをforループに変換するのが難しい場合は、再帰を試すことができるという良い兆候です。

于 2012-11-22T18:42:15.240 に答える