1

私は [[v], [v]] のような python 配列データ構造を持っており、その v はサイズ 2 または別の [[v],[v]] データ型の配列です。以下の実際のデータを見ることができます。

ex1:

list: [[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']]

ex2:

list: [[[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']], [1, '4.0.11']]

今私の問題は、最初に左から右に要素を取得する必要があることです [1, '1.0.1'] 次に [1, '2.0.1'] など。配列のサイズが異なることに注意してください。

どうすればこれを達成できますか?

4

3 に答える 3

3

考えられる解決策の 1 つは、リストを平坦化することです。

def flatten(lst):
    if not lst:
        return []
    elif not isinstance(lst, list):
        return [lst] 
    else:
        return flatten(lst[0]) + flatten(lst[1:])

これにより、リストを順番にたどることができます。

ls1 = [[[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']], [1, '4.0.11']]
flatten(ls1)
=> [1, '1.0.1', 1, '2.0.1', 1, '3.0.11', 1, '4.0.11']

または、代わりにジェネレーターを使用します。

def flatten(lst):
    if not lst:
        return
    elif not isinstance(lst, list):
        yield lst
    else:
        for e in flatten(lst[0]):
            yield e
        for e in flatten(lst[1:]):
            yield e

list(flatten(ls1))
=> [1, '1.0.1', 1, '2.0.1', 1, '3.0.11', 1, '4.0.11']
于 2013-09-24T03:01:56.340 に答える
0

この回答には明らかな何かが欠けている可能性がありますので、事前にお詫び申し上げます...

しかし、あなたのデータ構造は必要以上に複雑に見えますか?

だろう

v = [(1, '1.0.1'), (1, '2.0.1'), (1, '3.0.11')]
v.append((1, '4.0.11'))
print v

あなたがしたいことをしますか?

于 2013-09-24T02:58:34.690 に答える