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

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

DDD
リリース: 2024-10-29 14:30:02
オリジナル
457 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート