ホームページ >バックエンド開発 >Python チュートリアル >再帰的およびジェネレーターベースのアプローチを使用して、Python で不規則にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?
ネストされたリストのリストを平坦化するタスクは、特にネストが不規則な場合に困難になることがあります。提示された質問は、次の平坦化アルゴリズムの有効性を調査します:
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 と 3 の例を次に示します。
Python 2.6 で導入された 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
In Python 3、ベース文字列型は存在しなくなり、タプル (str, bytes) は代わりに使用されます。さらに、yield from 演算子により、ジェネレーターの反復が簡素化されます。
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 サイトの他の関連記事を参照してください。