1

私はPythonが初めてで、次のクエリに出くわしました。誰でも次の理由を説明できますか:

[ n**2 for n in range(1, 6)]

与えます:

[1, 4, 9, 16, 25]
4

3 に答える 3

1

これはリスト内包表記と呼ばれます。何が起こっているのかは次のようになります。

results = []
for n in range(1,6):
    results.append(n**2)

したがって、値を含むリストを反復処理し、[0, 1, 2, 3, 4, 5]各値を二乗します。次に、二乗の結果がresultsリストに追加され、表示された結果が返されます(これは、「0**2, 1**2, 2**2など」に相当し、**2「2乗」を意味します)。

この構造(他の基準に基づいた値をリストに入力する)はPythonで一般的な構造であるため、リスト内包表記は、そうするための簡略構文を提供します。

于 2013-01-09T20:36:53.740 に答える
1

インタープリターで管理可能なチャンクに分割します。

>>> range(1, 6)
[1, 2, 3, 4, 5]
>>> 2 ** 2   # `x ** 2` means `x * x`
4
>>> 3 ** 2
9
>>> for n in range(1, 6):
...   print n
1
2
3
4
5
>>> for n in range(1, 6):
...    print n ** 2
1
4
9
16
25
>>> [n ** 2 for n in range(1, 6)]
[1, 4, 9, 16, 25]
于 2013-01-09T20:40:13.840 に答える
0

それがリスト内包表記です。

3つの部分に分解すると; 「for」と「in」という言葉で区切られています..

例えば。

[ 1 対 2 で 3 ]

おそらく、逆方向に読むのが最も簡単です。

  • 3 - これは操作全体への入力のリストです
  • 2 - これは大きなリストからの単一の項目です
  • 1 - これはそのアイテムに対して実行する操作です

パート 1 とパート 2 は複数回実行されます。パート 3 で得られたリストの項目ごとに 1 回です。何度も実行されるパート 1 の出力は、操作全体の出力です。


あなたの例では:

  • 3 - リストを生成します: [1, 2, 3, 4, 5] --範囲は、最初のパラメーターから2 番目のパラメーターの1 つ前までです。
  • 2 - 「n」はそのリスト内の単一の数値を表します
  • 1 - n**2 (n の 2 乗) の新しいリストを生成します。

したがって、同等のコードは次のようになります。

result = []
for n in range(1, 6):
   result.append(n**2)

最後にそれをすべて分解します:

input = [1, 2, 3, 4, 5]
output = []

v = input[0] # value is 1
o = v**2     # 1 to the power of two is 1
output.append(o)

v = input[1] # value is 2
o = v**2     # 2 to the power of two = (2*2) = 4
output.append(o)

v = input[2] # value is 3
o = v**2     # 3 to the power of two is = (3*3) = 9
output.append(o)

v = input[3] # value is 4
o = v**2     # 4 to the power of two is = (4*4) = 16
output.append(o)

v = input[4] # value is 5
o = v**2     # 5 to the power of two is = (5*5) = 25
output.append(o)

于 2013-01-09T20:49:10.227 に答える