2016-11-12 4 views

Antwort

14

Die äußeren Klammern gruppieren nur runde Klammern. Sie benötigen ein Komma hinzufügen, um das äußere Gehäuse ein Tupel zu machen:

a = (('x','y'),)*4 
print(a) 
# (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y')) 

Für Zusammenhang wäre es nicht sinnvoll, ein Tupel zu erhalten, während f = (x + y) tun, zum Beispiel. mehr erfordern als nur eine einfache mult

a = (5) # integer 
a = (5,) # tuple 
a = 5, # tuple, parens are not compulsory 

Auf einer Seite zur Kenntnis, würde Artikel über verschachtelte Container Duplizieren:


Um ist in der Regel erforderlich, um eine Singleton Tupel, ein Komma zu definieren. Betrieb. Betrachten Sie Ihre erste Operation zum Beispiel:

>>> a = [['x', 'y']]*3 
>>> # modify first item 
... 
>>> a[0][0] = 'n' 
>>> a 
[['n', 'y'], ['n', 'y'], ['n', 'y']] 

Es gibt im Wesentlichen kein erstes Element - die Mutter Liste enthält nur eine Liste Objekt in verschiedenen Indizes dupliziert. Dies ist möglicherweise nicht besonders besorgniserregend für Tupel, da sie unveränderlich sind.

Betrachten Sie das richtigere Rezept:

>>> a = [['x', 'y'] for _ in range(3)] 
>>> a[0][0] = 'n' 
>>> a 
[['n', 'y'], ['x', 'y'], ['x', 'y']] 
+0

Dank. Aber was ist der Grund für diesen kleinen Unterschied? – muazfaiz

+1

Dies ist eine Unterscheidung zwischen geschlossenen Klammern, die als Klammer verwendet werden (zum Beispiel "(5) => 5") und einem Tupel. –

+1

Beachten Sie, dass das Endergebnis ein Tupel ist, das vier Referenzen auf dasselbe Tupel enthält (id (a [0]) == id (a [1]) 'ergibt 'True'). Tupel sind unveränderlich, also spielt es keine Rolle, aber wenn Sie vier gleiche Listen in Ihrem Tupel hatten und eines änderten, könnten die Ergebnisse überraschend sein. –

Verwandte Themen