Python ジェネレーターを使用した不規則なリストの平坦化
任意にネストされたリストのリストを平坦化する問題は一般的ですが、既存のソリューションは多くの場合失敗します。入れ子構造。特に、[[[1, 2, 3], [4, 5]], 6] のようなリストは、ほとんどのソリューションを使用してフラット化することはできません。
次の関数は、別の質問のソリューションに基づいています。このようなリストを効果的にフラット化できます:
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 と 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 と Iterable ABC および 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 サイトの他の関連記事を参照してください。