ホームページ >バックエンド開発 >Python チュートリアル >Python で任意にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?
任意にネストされたリストの平坦化
深さのレベルが異なるネストされたリストは、単一の次元に縮小する際に課題が生じます。浅いリストを平坦化する解決策は数多くありますが、その多くは [[[1, 2, 3], [4, 5]], 6] などの不規則にネストされたリストに苦労しています。
再帰アプローチ
質問で述べたように、アプローチの 1 つは次のとおりです。 recursion:
def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result
このアルゴリズムはリストを反復処理し、ネストされたリストを再帰的に平坦化し、反復不可能な要素を結果に追加します。
読みやすさとパフォーマンスを向上させるジェネレーター関数
ジェネレーター関数は、可読性と可読性を向上させる代替アプローチを提供します。
Python 2
from collections import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, basestring): for item in flatten(x): yield item else: yield x
Python 3
from collections.abc import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): yield from flatten(x) else: yield x
Python 3 、yield from 演算子は、ネストされたジェネレーターから項目を順番に返すのが便利ですが、Python 2 では、サブジェネレーターを明示的に繰り返します。
以上がPython で任意にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。