ホームページ >バックエンド開発 >Python チュートリアル >リスト内包表記は依存反復子を持つことができますか?

リスト内包表記は依存反復子を持つことができますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 13:21:02705ブラウズ

 Can List Comprehensions Have Dependent Iterators?

リスト内包表記の独立した反復子

Python では、リスト内包表記により複数の反復ループが可能になります。次の例を考えてみましょう:

<code class="python">[(x, y) for x in a for y in b]</code>

ここで、a と b はシーケンスです。この内包表記は、a と b のデカルト積から要素のペアを作成します。

反復子は依存できますか?

リスト内包表記内の 1 つの反復子は別の反復子を参照できますか?答えは「はい」です。次のコードはそれを示しています。

<code class="python">[x for x in a for a in b]</code>

この理解では、外側のループの反復子 a が内側のループの反復子になります。これは、ネストされたリストを効果的に平坦化します。

ネストされたリストがある場合:

<code class="python">a = [[1, 2], [3, 4]]</code>

次のリスト内包表記はそれを平坦化します。単一のリストに変換します:

<code class="python">[x for x in a for a in b]</code>

結果:

[1, 2, 3, 4]

ジェネレーターを使用した代替ソリューション

提供された Python コードのテキストは次のとおりです。文として保存されており、そのタスクは単語の 1 つのリストを抽出することです。ジェネレーターを使用してこれを実現する方法は次のとおりです。

<code class="python">text = ((&quot;Hi&quot;, &quot;Steve!&quot;), (&quot;What's&quot;, &quot;up?&quot;))
gen = (word for sentence in text for word in sentence)</code>

gen 変数は、単語のフラット化されたリストを生成します。

<code class="python">for word in gen:
    print(word)</code>

出力:

Hi
Steve!
What's
up?

以上がリスト内包表記は依存反復子を持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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