ホームページ >バックエンド開発 >Python チュートリアル >Python で任意にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?

Python で任意にネストされたリストを効率的にフラット化するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-12-28 16:04:11388ブラウズ

How Can We Efficiently Flatten Arbitrarily Nested Lists in 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 サイトの他の関連記事を参照してください。

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