197 votes

Quelle est la différence entre les listes encadrées par des crochets et des parenthèses en Python?

>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2

Les deux sont-ils valides? Est-ce qu'un est préféré pour une raison quelconque?

3 votes

Just FYI: il y a une différence plus profonde entre (i for i in ...) et [i for i in ...].

3 votes

@RikPoggi Quelle est la différence profonde? Pourriez-vous élaborer, s'il vous plaît?

14 votes

Le premier est une expression de générateur et le second est une compréhension de liste. Vous pouvez trouver des informations ici : Tutoriel officiel sur la compréhension de liste, PEP 289. Et voici quelques questions sur les systèmes d'exploitation : Expressions de générateur vs Compréhension de liste, compréhension de générateur.

303voto

jterrace Points 21939

Les crochets sont des listes tandis que les parenthèses sont des tuples.

Une liste est modifiable, cela signifie que vous pouvez modifier son contenu :

>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]

tandis que les tuples ne le sont pas :

>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
  File "", line 1, in 
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 une clé pour un dictionnaire, entre autres. 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 "", line 1, in 
TypeError: unhashable type: 'list'

Remarquez que, comme beaucoup l'ont souligné, vous pouvez ajouter des tuples ensemble. Par exemple :

>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)

Cependant, ceci ne signifie pas que les tuples sont modifiables. Dans l'exemple ci-dessus, un nouveau tuple est construit en ajoutant les deux tuples comme arguments. Le tuple original n'est pas modifié. Pour le démontrer, considérez ce qui suit :

>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)

Alors que, si vous deviez construire le 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]

2 votes

De bons exemples simples pour énumérer les différences. Merci!

0 votes

Pour l'exemple ci-dessus 'y=x', list et tuple se comportent de la même manière maintenant (vérifié dans python3.8.5)

11voto

Saurav Sahu Points 6098

Une différence intéressante :

lst=[1]
print lst          // affiche [1]
print type(lst)    // affiche 

notATuple=(1)
print notATuple        // affiche 1
print type(notATuple)  // affiche 
                                         ^^ au lieu de tuple (attendu)

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).

0 votes

Merci. C'est ce que je cherchais. Le code que j'ai vu avait un (list1 + list2 + list3) et il a renvoyé une liste, pas un tuple.

4voto

Gandaro Points 1707

Ils ne sont pas des listes, ils sont une liste et un tuple. Vous pouvez en apprendre davantage sur les tuples dans le tutoriel Python. Alors que vous pouvez muter des listes, cela n'est pas possible avec les tuples.

In [1]: x = (1, 2)

In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/user/ in ()

TypeError: 'tuple' object does not support item assignment

3voto

xyzzy71 Points 41

Une autre façon dont les crochets et les parenthèses diffèrent est que les crochets peuvent décrire une compréhension de liste, par exemple [x for x in y]

Alors que la syntaxe parenthétique 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 ?

2voto

NPE Points 169956

Le premier est une liste, le deuxième est un tuple. Les listes sont modifiables, les tuples ne le sont pas.

Jetez un œil à la section Structures de Données du tutoriel, et à la section Types de Séquence de la documentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X