2016-01-27 24 views
8

Bunu döngü için gördüm ve son yazımın neden 2 olduğunu tam olarak anlamadım. Neden 3 değil?Döngü ifadesi için garip

a = [0, 1, 2, 3] 

for a[-1] in a: 
    print(a[-1]) 

üzerinden: for döngü her bir değer atar

for <target> in <iterable> 

:

0 
1 
2 
2 
+5

Yirmi yıllık Python, ve hiç bir zaman için bir "x" yapmayı hiç düşünmedim. Teşekkürler :-) – RemcoGerlich

+0

Aynı burada; Her zaman, keyfi bir değerden ziyade bir isim olması gerektiğini varsaydım. – chepner

+0

@chepner: Sadece bir hedef listesi. Yani 'modulename.global_var' da geçerlidir. Veya 'sözlük [anahtar]'. Ya da bunların bir listesi .. –

cevap

20

for döngü giriş iterable her değer atama bir Hedef değişken olarak a[-1] kullanır Bu hedefe a listesi, a[-1]. Bu, aynı zamanda aynı listedeki son öğe olur.

Yani liste döngü içinde her adımda değiştirir:

>>> 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] 

tek ama-son yineleme koyar (a[-1] içine veya a[-2]) a[3] içine a[2] atar ve bu neden, ne zaman olduğunu son yineleme gerçekleşirse, numaralı telefonu tekrar 2görürsünüz.

Bkz. for loop grammar; atama hedefi için genel bir target_list alır, tıpkı bir assigment statement gibi. Ödevlerde yalnızca basit adlarla sınırlı değilsiniz ve for döngüsünde bulunmuyorsunuz.