ホームページ >バックエンド開発 >Python チュートリアル >再帰的およびジェネレーターベースのアプローチを使用して、Python で不規則にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?

再帰的およびジェネレーターベースのアプローチを使用して、Python で不規則にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-12-28 03:19:15320ブラウズ

How Can Irregularly Nested Lists Be Efficiently Flattened in Python Using Recursive and Generator-Based Approaches?

不規則にネストされたリストのリストを平坦化する

ネストされたリストのリストを平坦化するタスクは、特にネストが不規則な場合に困難になることがあります。提示された質問は、次の平坦化アルゴリズムの有効性を調査します:

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

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

Python 3

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。