4次元リストの奥底から

How access 4 dimension list values or indexes? [on hold] – StackOverflow

多重リストのフラット化あれこれ(with Python)

を利用.

flatten=lambda i:[a for b in i for a in (flatten(b) if hasattr(b,'__iter__') else(b,))]

flatten(a)

RecursionError: maximum recursion depth exceeded

ふむ…….

import collections


def flatten(nested_list):
    result = []
    for element in nested_list:
        if isinstance(element, collections.Iterable) and not isinstance(element, str):
            result.extend(flatten(element))
        else:
            result.append(element)
    return result

list(flatten(a))

[1,
2,
3,
4,
‘x’,
‘y’,
8,
5,
6,
7,
8,
9,
‘x’,
‘y’,
3,
10,
12,
13,
‘x’,
‘y’,
55,
16,
17,
18,
‘x’,
‘y’,
11,
20]

(再帰の深さが許す限り)データ構造がどれだけ不規則でも関係ない.
 
 
 

表示したいだけなら,これのキモである
「isinstance(element, collections.Iterable)」を使えば良い.

def print_func(x):
    for e in x:
        if isinstance(e, collections.Iterable) and not isinstance(e, str):
            print_func(e)
        else:
            if e in ['x', 'y']:
                print(e)

print_func(a)

x
y
x
y
x
y
x
y

この程度のそれ程深くないリストなら,探索的にやっても良い.

for x in a:
    for i in range(3):
        if hasattr(x[i], '__iter__'):
            for j in range(3):
                if x[i][j] == ['x', 'y']:
                    print(x[i][j])        

[‘x’, ‘y’]
[‘x’, ‘y’]
[‘x’, ‘y’]
[‘x’, ‘y’]

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中