私はPythonが初めてで、次のクエリに出くわしました。誰でも次の理由を説明できますか:
[ n**2 for n in range(1, 6)]
与えます:
[1, 4, 9, 16, 25]
これはリスト内包表記と呼ばれます。何が起こっているのかは次のようになります。
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で一般的な構造であるため、リスト内包表記は、そうするための簡略構文を提供します。
インタープリターで管理可能なチャンクに分割します。
>>> 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]
それがリスト内包表記です。
3つの部分に分解すると; 「for」と「in」という言葉で区切られています..
例えば。
[ 1 対 2 で 3 ]
おそらく、逆方向に読むのが最も簡単です。
パート 1 とパート 2 は複数回実行されます。パート 3 で得られたリストの項目ごとに 1 回です。何度も実行されるパート 1 の出力は、操作全体の出力です。
あなたの例では:
したがって、同等のコードは次のようになります。
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)