Angenommen, Sie eine Liste von Tupeln, die wie folgt:
L = [(1,2), (3,4), (5,6)]
Angenommen, Sie diese Tupel in besonderer Weise drucken möchten: explizit sein
for tup in L:
a = tup[0]
b = tup[1]
if a<b:
print a,b
else:
print b,a
Aber die Zuordnung a
und b
Der Inhalt von tup
ist ziemlich mühsam. So könnten Sie dies tun:
for tup in L:
a,b = tup
if a<b:
print a,b
else:
print b,a
Aber man könnte es auch machen weniger langweilig:
for (a,b) in L: # you could also do "for [a,b] in L"
if a<b:
print a,b
else:
print b,a
Hier (a,b)
Muster passt gegen das Element, das durch die Iteration zurückgeführt wird. In der ersten Ausführung der for-Schleife, das Element durch Iteration zurückgegeben wird (1,2)
ist, das Muster gegen (a,b)
abgestimmt wird, die daher 1
-a
und 2
-b
Jetzt in Ihrem ersten Beispiel weist, iterieren Sie über eine Liste mit einer leeren Liste. Dies bedeutet, dass Sie versuchen, so viele 0
s zu drucken, wie es []
s in dieser Liste gibt. Aber es ist ein wenig komplexer als das:
Wenn Sie versuchen, Muster wie in meinem dritten Beispiel, Python iteriert über die Liste (oder Tupel) von Variablen und das vom Iterator zurückgegebenen Element, gleichzeitig, die Zuweisung von Werten als sie gehen. Wenn Ihr Muster also keine Variablen enthält, sollte das Element, mit dem Sie ein Muster erstellen möchten, ebenfalls leer (und iterierbar) sein. Dies erklärt das folgende Verhalten:
>>> for i in 5: print i
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> for [] in [[], 5]: print 0
...
0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
... und dieses Verhalten zu:
>>> x,y = (2,5,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> for [] in [[], [5]]: print 0
...
0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Jetzt, da für Ihr zweites Beispiel des [:]
Betrieb schafft im Grunde eine Kopie der Liste Es wird aufgerufen, so dass die Änderung der ursprünglichen Liste die Kopie nicht verändert und umgekehrt:
So
, wenn Sie anrufen [][:]
, alles, was Sie tun, ist eine neue, leere Liste zu machen, die die gleichen wie meine Erklärung für Ihr erstes Beispiel
Google für Sequenz Auspacken funktioniert. Sollte es erklären. – hendrik