8
私はこのループを見ましたが、最後のプリントが2である理由はわかりませんでした。 なぜ3ではないのですか?アウト奇妙なループステートメント
a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
:
0
1
2
2
私はこのループを見ましたが、最後のプリントが2である理由はわかりませんでした。 なぜ3ではないのですか?アウト奇妙なループステートメント
a = [0, 1, 2, 3]
for a[-1] in a:
print(a[-1])
:
0
1
2
2
for
ループが反復可能な入力から各値を割り当て、変数標的としてa[-1]
を使用する:
for <target> in <iterable>
for
ループが各値を代入しますその1つのターゲットにa
のリスト、a[-1]
。それはまたと同じリスト内の最後の要素になります。
だからリストループを介して各ステップでを変更:
>>> a = [0, 1, 2, 3]
>>> for a[-1] in a:
... print a
...
[0, 1, 2, 0] # assigned a[0] == 0 to a[-1] (or a[3])
[0, 1, 2, 1] # assigned a[1] == 1 to a[-1]
[0, 1, 2, 2] # assigned a[2] == 2 to a[-1]
[0, 1, 2, 2] # assigned a[3] == 2 (since the previous iteration) to a[-1]
一しかし、最後の反復は、a[3]
(又はa[-1]
にa[-2]
)に入れa[2]
を割り当て、なぜ、場合すなわち最後の反復が行われると、2
が表示されます。
for
loop grammarを参照してください。割り当て先はassigment statementのように、のターゲットリストが割り当てられます。代入の単純な名前に限定されるものではなく、for
のループでもありません。
20年のPythonで、私は 'a [a]のために'を行うことは決して考えなかった。ありがとう:-) – RemcoGerlich
同じです。私はいつも、それが任意の左辺値ではなく名前でなければならないと仮定しました。 – chepner
@chepner:これは単なるターゲットリストです。したがって、 'modulename.global_var'も有効です。または 'dictionary [key]'です。またはそれらのリスト.. –