1131 votes

Quelle est la différence entre une liste et des tuples?

Quelle est la différence?

Quels sont les avantages / inconvénients des tuples / listes?

1092voto

nikow Points 8887

En dehors de tuples immuable, il y a aussi une distinction sémantique qui devraient guider leur utilisation. Les Tuples sont hétérogènes structures de données (c'est à dire, leurs entrées ont des significations différentes), alors que les listes sont homogènes séquences. Les Tuples de structure, les listes de commande.

À l'aide de cette distinction rend le code plus explicite et compréhensible.

Un exemple serait paires de page et le numéro de ligne de sites de référence dans un livre, par exemple:

my_location = (42, 11)  # page number, line number

Vous pouvez ensuite l'utiliser comme une clé dans un dictionnaire pour stocker des notes sur les lieux. Une liste sur l'autre main peut être utilisé pour stocker de multiples endroits. Naturellement, on pourrait vouloir ajouter ou supprimer des emplacements de la liste, il est donc logique que les listes sont mutables. D'autre part, il n'a probablement pas de sens pour modifier le numéro de page dans un emplacement n-uplet tout en gardant le numéro de la ligne intact, ce serait vous donner un complètement nouveau. D'autre part, il pourrait y avoir des situations où il est parfaitement logique pour corriger simplement le numéro de la ligne (sans remplacement de l'ensemble de la n-uplet).

Il y a quelques articles intéressants sur cette question, par exemple "Python les Tuples ne sont Pas Constant Listes" ou "la Compréhension de tuples par rapport aux listes en Python". L'officiel de Python de la documentation mentionne également ("n-Uplets sont immuables, et contiennent généralement une séquence hétérogène ...").

Dans un langage statiquement typé comme Haskell les valeurs dans un tuple ont généralement différents types et la longueur de la tuple doit être fixe. Dans une liste les valeurs ont tous le même type et la longueur n'est pas fixe. Donc, la différence est très évident.

Il y a enfin le namedtuple en Python, ce qui est logique car un n-uplet est déjà censé avoir une structure. Cela souligne l'idée que les tuples sont un poids léger alternative pour les classes et les instances.

400voto

Nikita Points 328

La différence entre la liste et le n-uplet

  1. Taille

    a = tuple(range(1000))
    b = list( range(1000))
    
    a.__sizeof__() # 8024
    b.__sizeof__() # 9088
    

    En raison de la petite taille d'un n-uplet de fonctionnement avec un peu plus rapide, mais pas tant que ça de parler de sujet jusqu'à ce que vous avez une énorme quantité d'éléments.

  2. Opérations autorisées

    b    = [1,2]   
    b[0] = 3       # [3, 2]
    
    a    = (1,2)
    a[0] = 3       # Error
    

    ce que cela signifie que vous ne pouvez pas supprimer ou tri élément d'un tuple. Dans le même temps, vous pourriez ajouter un nouvel élément à la fois de la liste et de tuple avec la seule différence que vous allez changer l'id de la n-uplet par l'ajout de l'élément

    a     = (1,2)
    b     = [1,2]  
    
    id(a)          # 140230916716520
    id(b)          # 748527696
    
    a   += (3,)    # (1, 2, 3)
    b   += [3]     # [1, 2, 3]
    
    id(a)          # 140230916878160
    id(b)          # 748527696
    
  3. L'utilisation de la

    Vous ne pouvez pas utiliser la liste comme un dictionnaire identificateur

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    

217voto

Dangph Points 5561

Si vous vous promenez, vous pouvez noter vos coordonnées à tout instant dans un (x, y) tuple.

Si vous souhaitez enregistrer votre voyage, vous pouvez ajouter votre position toutes les quelques secondes à une liste.

Mais vous ne pouviez pas faire l'inverse.

88voto

Dave Webb Points 90034

La principale différence est que les tuples sont immuables. Cela signifie que vous ne pouvez pas modifier les valeurs dans un tuple une fois que vous avez créé.

Donc, si vous avez besoin de modifier les valeurs d'utiliser une Liste.

Si vous utilisez un tuple je peux penser de ces avantages:

  1. Légère amélioration de la performance.
  2. Comme un n-uplet est immuable, peut être utilisé d'une clé dans un dictionnaire.
  3. Si vous ne pouvez pas le modifier ni de quelqu'un d'autre, c'est-à-dire que vous n'avez pas besoin de vous soucier de toutes les fonctions de l'API etc. la modification de votre tuple sans être demandé.

33voto

duffymo Points 188155

Les listes sont mutables; les tuples ne sont pas.

À partir de docs.python.org/2/tutorial/datastructures.html

Les Tuples sont immuables, et contiennent généralement une séquence hétérogène de les éléments qui sont accessibles via le déballage (voir plus loin dans cette section) ou de l'indexation (ou même par l'attribut dans le cas de namedtuples). Listes sont mutables, et leurs éléments sont généralement homogènes et sont accessible par une itération sur la liste.

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