>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Sind beide gültig? Wird man aus irgendeinem Grund bevorzugt?
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Sind beide gültig? Wird man aus irgendeinem Grund bevorzugt?
Antworten:
Eckige Klammern sind Listen, während Klammern Tupel sind .
Eine Liste ist veränderbar, dh Sie können ihren Inhalt ändern:
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
während Tupel nicht sind:
>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
Der andere Hauptunterschied besteht darin, dass ein Tupel hashbar ist, was bedeutet, dass Sie es unter anderem als Schlüssel für ein Wörterbuch verwenden können. Beispielsweise:
>>> x = (1,2)
>>> y = [1,2]
>>> z = {}
>>> z[x] = 3
>>> z
{(1, 2): 3}
>>> z[y] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Beachten Sie, dass Sie, wie viele Leute bereits betont haben, Tupel hinzufügen können. Beispielsweise:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
Dies bedeutet jedoch nicht, dass Tupel veränderlich sind . Im obigen Beispiel wird ein neues Tupel erstellt, indem die beiden Tupel als Argumente addiert werden. Das ursprüngliche Tupel wird nicht geändert. Beachten Sie Folgendes, um dies zu demonstrieren:
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
Wenn Sie dasselbe Beispiel mit einer Liste y
erstellen würden , würde dies ebenfalls aktualisiert:
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
Ein interessanter Unterschied:
lst=[1]
print lst // prints [1]
print type(lst) // prints <type 'list'>
notATuple=(1)
print notATuple // prints 1
print type(notATuple) // prints <type 'int'>
^^ instead of tuple(expected)
Ein Komma muss in einem Tupel enthalten sein, auch wenn es nur einen einzigen Wert enthält. zB (1,)
statt (1)
.
Sie sind keine Listen, sie sind eine Liste und ein Tupel. Informationen zu Tupeln finden Sie im Python-Tutorial. Während Sie Listen mutieren können, ist dies mit Tupeln nicht möglich.
In [1]: x = (1, 2)
In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/user/<ipython console> in <module>()
TypeError: 'tuple' object does not support item assignment
Ein anderer Unterschied zwischen Klammern und Klammern besteht darin, dass eckige Klammern ein Listenverständnis beschreiben können, z [x for x in y]
Während die entsprechenden parenthetic Syntax gibt ein Tupel - Generator :(x for x in y)
Sie können ein Tupelverständnis erhalten, indem Sie: tuple(x for x in y)
Das erste ist eine Liste, das zweite ist ein Tupel. Listen sind veränderlich, Tupel nicht.
Schauen Sie sich den Abschnitt Datenstrukturen des Lernprogramms und den Abschnitt Sequenztypen der Dokumentation an.
Kommagetrennte Elemente, die von (
und eingeschlossen )
sind tuple
, sind s, diejenigen, die von [
und eingeschlossen sind , ]
sind list
s.
:P
(
und )
sind tuple
s, jene eingeschlossen durch [
und ]
sind list
s.“
(i for i in ...)
und[i for i in ...]
.