Question Quelle est la différence entre les listes et les tuples?


Quelle est la différence?

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


844
2018-03-09 15:41


origine


Réponses:


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

L'utilisation de cette distinction rend le code plus explicite et compréhensible.

Un exemple serait des paires de pages et de numéros de lignes vers des emplacements 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 des emplacements. Une liste d'un autre côté pourrait être utilisée pour stocker plusieurs emplacements. Naturellement, on peut vouloir ajouter ou supprimer des emplacements de la liste, il est donc logique que les listes soient modifiables. D'autre part, il n'est pas logique d'ajouter ou de supprimer des éléments d'un emplacement existant - donc les tuples sont immuables.

Il peut y avoir des situations où vous souhaitez modifier des éléments dans un tuple d'emplacement existant, par exemple lors de l'itération à travers les lignes d'une page. Mais l'immutabilité de tuple vous oblige à créer un nouveau tuple de localisation pour chaque nouvelle valeur. Cela semble incommode à première vue, mais l'utilisation de données immuables comme celle-ci est la pierre angulaire des types de valeur et des techniques de programmation fonctionnelle, qui peuvent présenter des avantages substantiels.

Il y a quelques articles intéressants sur cette question, par ex. "Les tuples Python ne sont pas simplement des listes constantes" ou "Comprendre les tuples et les listes en Python". La documentation officielle de Python mentionne aussi ceci

"Les tuples sont immuables, et contiennent généralement une séquence hétérogène ...".

Dans une langue statiquement typée comme Haskell les valeurs dans un tuple ont généralement des types différents et la longueur de l'uplet doit être fixée. Dans une liste, les valeurs ont toutes le même type et la longueur n'est pas fixée. Donc la différence est très évidente.

Enfin, il y a le namedtuple en Python, ce qui est logique car un tuple est déjà supposé avoir une structure. Cela souligne l'idée que les tuples sont une alternative légère aux classes et instances.


881
2018-03-09 16:02



Différence entre liste et tuple

  1. Littéral

    someTuple = (1,2)
    someList  = [1,2] 
    
  2. Taille

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

    En raison de la plus petite taille d'une opération de tuple, cela devient un peu plus rapide, mais pas tellement à mentionner jusqu'à ce que vous ayez un grand nombre d'éléments.

  3. Opérations autorisées

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

    Cela signifie également que vous ne pouvez pas supprimer un élément ou trier un tuple. Cependant, vous pouvez ajouter un nouvel élément à la fois à la liste et au tuple avec la seule différence que vous changerez l'identifiant du tuple en ajoutant un é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
    
  4. Usage

    Comme une liste est mutable, elle ne peut pas être utilisée comme une clé dans un dictionnaire, alors qu'un tuple peut être utilisé.

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

298
2017-09-19 11:07



Si vous alliez vous promener, vous pouviez 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.


176
2018-03-09 17:14



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

Donc, si vous avez besoin de changer les valeurs, utilisez une liste.

Avantages pour les tuples:

  1. Légère amélioration des performances.
  2. Comme un tuple est immuable, il peut être utilisé comme clé dans un dictionnaire.
  3. Si vous ne pouvez pas le changer, personne d'autre ne peut le faire, ce qui veut dire que vous n'avez pas besoin de vous soucier des fonctions de l'API, etc., sans modifier votre tuple.

69
2018-03-09 15:42



Les listes sont mutables; les tuples ne le sont pas.

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   éléments accessibles via le déballage (voir plus loin dans cette section)   ou l'indexation (ou même par attribut dans le cas des namedtuples). Listes   sont mutables, et leurs éléments sont généralement homogènes et sont   accédé en itérant sur la liste.


30
2018-03-09 15:41



Les listes sont pour la boucle, les tuples sont pour les structures, c'est-à-dire "%s %s" %tuple.

Les listes sont généralement homogènes, les tuples sont généralement hétérogènes.

Les listes sont de longueur variable, les tuples sont de longueur fixe.


18
2018-04-19 05:43



Ses été mentionné que la différence est largement sémantique: les gens s'attendent à ce qu'un tuple et une liste représentent des informations différentes. Mais cela va plus loin qu'une ligne directrice; Certaines bibliothèques se comportent différemment en fonction de ce qui leur est transmis. Prenez NumPy par exemple (copié de un autre post où je demande plus d'exemples):

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

Le point est, alors que NumPy peut ne pas faire partie de la bibliothèque standard, c'est un Majeur La bibliothèque Python, et dans les listes NumPy et les tuples sont des choses complètement différentes.


17
2017-08-12 07:06



Voici un exemple de listes Python:

my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]

Voici un exemple de tuple Python:

my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")

Les listes Python et les tuples sont similaires en ce sens qu'ils sont tous deux des collections ordonnées de valeurs. Outre la faible différence que les listes sont créées à l'aide des parenthèses "[..., ...]" et des tuples utilisant des parenthèses "(..., ...)", la différence technique entre les syntaxes "codées en dur dans la syntaxe Python" est que les éléments d'un tuple particulier sont immuables alors que les listes sont mutables (... donc seulement les tuples sont hashable et peuvent être utilisés comme des clés de dictionnaire / dièse!). Cela donne lieu à des différences dans la façon dont ils peuvent ou ne peuvent pas être utilisés (imposés a priori par la syntaxe) et des différences dans la façon dont les gens choisissent de les utiliser (encouragés comme «meilleures pratiques», a posteriori, c'est ce que intelligent les programmeurs le font). La différence principale a posteriori dans la différenciation lorsque les tuples sont utilisés par rapport à l'utilisation des listes réside dans sens les gens donnent à l'ordre des éléments.

Pour les tuples, «commander» ne signifie rien de plus qu'une «structure» spécifique pour conserver des informations. Les valeurs trouvées dans le premier champ peuvent facilement être commutées dans le second champ car chacune fournit des valeurs sur deux dimensions ou échelles différentes. Ils fournissent des réponses à différents types de questions et sont généralement de la forme: pour un objet / sujet donné, quels sont ses attributs? L'objet / le sujet reste constant, les attributs diffèrent.

Pour les listes, «order» signifie une séquence ou une directionnalité. Le deuxième élément DOIT venir après le premier élément car il est positionné à la 2ème place sur la base d'une échelle ou d'une dimension particulière et commune. Les éléments sont pris dans leur ensemble et fournissent généralement des réponses à une seule question typiquement de la forme, pour un attribut donné, comment ces objets / sujets se comparent-ils? L'attribut reste constant, l'objet / le sujet diffère.

Il existe d'innombrables exemples de personnes dans la culture populaire et les programmeurs qui ne se conforment pas à ces différences et il y a d'innombrables personnes qui pourraient utiliser une fourchette à salade pour leur plat principal. À la fin de la journée, c'est bien et les deux peuvent généralement faire le travail.

Pour résumer certains des détails les plus fins

Similitudes:

  1. Duplicates - Les tuples et les listes permettent des doublons
  2. Indexation, sélection et découpage - Les tuples et les listes indexent en utilisant des valeurs entières trouvées entre parenthèses. Donc, si vous voulez les 3 premières valeurs d'une liste ou d'un tuple donné, la syntaxe serait la même:

    >>> my_list[0:3]
    [0,1,2]
    >>> my_tuple[0:3]
    [a,b,c]
    
  3. Comparaison et tri - Deux tuples ou deux listes sont toutes deux comparées par leur premier élément, et s'il y a une égalité, puis par le second élément, et ainsi de suite. Aucune attention supplémentaire n'est accordée aux éléments suivants après que les éléments précédents montrent une différence.

    >>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
    True
    >>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
    True
    

Différences: - A priori, par définition

  1. Syntaxe - Les listes utilisent [], les tuples utilisent ()

  2. Mutabilité - Les éléments d'une liste donnée sont mutables, les éléments d'un tuple donné ne sont PAS mutables.

    # Lists are mutable:
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
    >>> top_rock_list[1]
    'Kashmir'
    >>> top_rock_list[1] = "Stairway to Heaven"
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']
    
    # Tuples are NOT mutable:       
    >>> celebrity_tuple
    ('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
    >>> celebrity_tuple[5]
    'Dead'
    >>> celebrity_tuple[5]="Alive"
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    
  3. Hashtables (Dictionnaires) - Comme les hashtables (dictionnaires) requièrent que ses clés soient réductibles et donc immuables, seules les tuples peuvent agir comme des clés de dictionnaire, pas comme des listes.

    #Lists CAN'T act as keys for hashtables(dictionaries)
    >>> my_dict = {[a,b,c]:"some value"}
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    #Tuples CAN act as keys for hashtables(dictionaries)
    >>> my_dict = {("John","Wayne"): 90210}
    >>> my_dict
    {('John', 'Wayne'): 90210}
    

Différences - A posteriori, en usage

  1. Homo vs. Hétérogénéité des éléments - En règle générale, les objets de liste sont homogènes et les objets de tuple sont hétérogènes. Autrement dit, les listes sont utilisées pour des objets / sujets du même type (comme tous les candidats présidentiels, ou tous les chanteurs, ou tous les coureurs) alors que ce n'est pas forcé par), alors que les tuples sont plus pour des objets hétérogènes.

  2. Looping vs. Structures - Bien que les deux permettent une boucle (pour x dans my_list ...), il est vraiment logique de le faire pour une liste. Les tuples sont plus appropriés pour structurer et présenter l'information (% s% s résidant dans% s est un% s et actuellement% s% ("John", "Wayne", 90210, "Acteur", "Mort"))


12
2018-03-22 13:48



Les valeurs de liste peut être changé à tout moment, mais les valeurs de tuples ne peut pas être changé.

le avantages et inconvénients dépend de l'utilisation. Si vous avez de telles données que vous ne voulez jamais changer alors vous devriez utiliser tuple, sinon la liste est la meilleure option.


8
2018-06-06 11:14



Les listes sont destinées à être des séquences homogènes, tandis que les tuples sont des structures de données hétérogènes.


6
2018-03-09 20:29



le PEP 484 - Astuces de type dit que les types d'éléments d'un tuple peut être tapé individuellement; pour que tu puisses dire Tuple[str, int, float]; mais un list, avec List La classe de typage ne peut prendre qu'un seul paramètre de type: List[str], ce qui laisse entendre que la différence du 2 est que le premier est hétérogène, alors que le second est intrinsèquement homogène.

En outre, la bibliothèque standard utilise principalement le tuple comme une valeur de retour de telles fonctions standard où le C retournerait un struct.


2
2017-09-22 16:13