>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Sont-ils tous les deux valables? Est-ce qu'on préfère pour une raison quelconque?
Les crochets sont listes , tandis que les parenthèses sont tuples .
Une liste est modifiable, ce qui signifie que vous pouvez modifier son contenu:
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
tandis que les tuples ne sont pas:
>>> 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'
L'autre différence principale est qu'un tuple est hashable, ce qui signifie que vous pouvez l'utiliser comme clé d'un dictionnaire, entre autres choses. Par exemple:
>>> 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'
Notez que, comme beaucoup de personnes l’ont souligné, vous pouvez ajouter des nuplets ensemble. Par exemple:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
Cependant, cela ne signifie pas que les n-uplets sont mutables . Dans l'exemple ci-dessus, un nouveau Tuple est construit en additionnant les deux n-uplets en tant qu'arguments. Le tuple d'origine n'est pas modifié. Pour démontrer cela, considérez les points suivants:
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
Tandis que si vous construisiez ce même exemple avec une liste, y
serait également mis à jour:
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
Ce ne sont pas des listes, elles sont une liste et un tuple. Vous pouvez lire sur tuples dans le tutoriel Python. Bien que vous puissiez modifier des listes, cela n’est pas possible avec des n-uplets.
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
Le premier est une liste, le second est un tuple. Les listes sont modifiables, les n-uplets ne le sont pas.
Jetez un coup d'œil à la section Structures de données du tutoriel et à la section Types de séquence de la documentation.
Les éléments séparés par des virgules entourés par (
et )
sont Tuple
s, ceux qui sont entourés par [
et ]
sont list
s.
Une différence intéressante:
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)
Une virgule doit être incluse dans un tuple même s'il ne contient qu'une seule valeur. par exemple. (1,)
au lieu de (1)
.
Une autre différence entre les crochets et les parenthèses est que les crochets peuvent décrire une compréhension de la liste, par ex. [x for x in y]
Alors que la syntaxe entre parenthèses correspondante spécifie un générateur de Tuple : (x for x in y)
Vous pouvez obtenir une compréhension de Tuple en utilisant: Tuple(x for x in y)
Voir: Pourquoi n'y a-t-il pas de compréhension de Tuple en Python?