不規則なネストされたリストのリストを平坦化する方法
リスト構造の平坦化に関する議論はありますが、リストが次のような場合には解決策が不十分になる傾向があります。深く入れ子になっています。効果的なアプローチの 1 つを以下に示します。
再帰関数アプローチ
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
この関数は、各要素 (文字列を除く) が反復可能かどうかを確認し、true の場合は再帰的に平坦化します。 。反復不可能な要素は結果に追加されます。
ジェネレーター関数のアプローチ
ジェネレーター関数を使用すると、平坦化プロセスの読みやすさとパフォーマンスを向上させることができます。
Python 2 (Iterable を使用) ABC):
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 (str と bytes にタプルを使用):
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 で不規則にネストされたリストを効率的に平坦化する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。