ホームページ >バックエンド開発 >Python チュートリアル >Python の入れ子リスト内包表記はどのように機能するのでしょうか?また、ループ形式での同等のものは何ですか?

Python の入れ子リスト内包表記はどのように機能するのでしょうか?また、ループ形式での同等のものは何ですか?

DDD
DDDオリジナル
2024-10-29 14:30:02486ブラウズ

How do Nested List Comprehensions in Python Work and What are Their Equivalents in Loop Form?

入れ子になったリスト内包表記について

リスト内包表記は、Python でコレクションを操作するための簡潔で洗練された構文を提供します。ネストされた for ループを組み合わせることで、複雑なデータ構造を簡単に構築できます。ここでは、ネストされたリスト内包表記がどのように機能するかの詳細な内訳を示します。

指定されたリスト内包表記を検討します。

<code class="python">[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
for i in range(len(rows[0]))]</code>

このコードは、次のループと同等です。

<code class="python">result = []
for i in range(len(rows[0])):
  innerResult = []
  for row in rows:
    innerResult.append(row[i])
  innerResult2 = []
  for row in rows:
    innerResult2.append(row[i])
  tuple = (min(innerResult), max(innerResult2))
  result.append(tuple)</code>

一般に、次の形式のネストされたリスト内包表記:

<code class="python">[exp2([exp1 for x in xSet]) for y in ySet]</code>

は次のように変換できます:

<code class="python">result = []
for y in ySet:
  innerResult = []
  for x in xSet:
    innerResult.append(exp1)
  exp2Result = exp2(innerResult)
  result.append(exp2Result)</code>

より単純なケースの場合:

<code class="python">[exp1 for x in xSet for y in ySet] </code>

これは、

<code class="python">result = [] 
for x in xSet:
  for y in ySet: 
    result.append(exp1)</code>

と同等です。一方、

<code class="python">[[exp1 for x in xSet] for y in ySet]</code>

は、

<code class="python">result = []
for y in ySet:
  innerResult = []
  for x in xSet:
    innerResult.append(exp1)
  result.append(innerResult)</code>

と同等です。単一リストの内包は常に左から右へ行われます。例:

<code class="python">[item for item in row for row in matrix] </code>

内側のループ変数 'row' が外側のループで定義されていないため、このコードは機能しません。正しい形式は次のとおりです:

<code class="python">[item for row in matrix for item in row] </code>

以上がPython の入れ子リスト内包表記はどのように機能するのでしょうか?また、ループ形式での同等のものは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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