Python:quelle est la différence entre (1,2,3) et [1,2,3], et quand dois-je utiliser chaque?

StackOverflow https://stackoverflow.com/questions/1983

  •  08-06-2019
  •  | 
  •  

Question

Dans de nombreux endroits, (1,2,3) (un tuple) et [1,2,3] (une liste) peuvent être utilisés de façon interchangeable.

Quand devrais-je utiliser l'un ou l'autre, et pourquoi?

Était-ce utile?

La solution

À partir de la Python FAQ:

Les listes et les tuples, bien que similaire à bien des égards, sont généralement utilisés de manières fondamentalement différentes.Les Tuples peuvent être considérés comme similaires Pascal enregistrements ou C les structures;ils sont de petites collections de données, qui peuvent être de types différents qui sont gérées par groupe.Par exemple, un de coordonnées Cartésiennes est représentée de manière appropriée comme un tuple de deux ou trois numéros.

Les listes, d'autre part, sont plus comme des tableaux dans d'autres langues.Ils ont tendance à détenir un nombre variable d'objets qui ont toutes le même type et qui sont exploités sur un-à-un.

Généralement, par convention, vous ne choisissez pas une liste ou un tuple juste, fondée sur ses (im)de la mutabilité.Vous choisissez un n-uplet pour les petites collections de complètement différents éléments de données dans laquelle une véritable classe serait trop lourd, et une liste pour les collections de toute taille raisonnable d'où vous avez une homogène un ensemble de données.

Autres conseils

La liste [1,2,3] dynamique et flexible, mais que la flexibilité est livré à une vitesse de coût.

Le tuple (1,2,3) est fixe (immuable) et donc plus rapide.

Les Tuples sont un moyen rapide\flexible de façon à créer composite les types de données.Les listes sont des conteneurs permettant, ainsi, des listes d'objets.

Par exemple, vous pouvez utiliser une Liste pour stocker une liste d'étudiants détails dans une classe.

Chaque étudiant en détail dans cette liste peut être un 3-tuple contenant leur numéro de rôle, le nom et le test du score.

`[(1,'Mark',86),(2,'John',34)...]`

Aussi, parce que les tuples sont immuables, ils peuvent être utilisés comme clés dans les dictionnaires.

La notion de n-uplets sont très expressifs:

  • De façon pragmatique, ils sont parfaits pour l'emballage et le déballage des valeurs (x,y=coord).

  • En combinaison avec les dictionnaires (tables de hachage), ils permettent des formes de cartographie qui exigerait de nombreux niveaux de l'association.Par exemple, envisager de marquage (x,y) a été trouvé.

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
    
  • Les listes doivent être utilisés dans l'attente des opérations sur son contenu (d'où les différentes mentions de l'immuabilité).On voudra pop, push, splice, tranche, de recherche, d'insertion avant, insérer, après, etc avec une liste.

  • Les Tuples devrait être un faible niveau de représentation d'un objet, où de simples comparaisons sont faites, ou des opérations telles que l'extraction de la n-ième élément ou de n éléments dans une manière prévisible, telles que les coordonnées de l'exemple précédent.

  • Enfin, les listes ne sont pas hashable, de sorte que le type de cartographie à l'aide de dictionnaires (tables de hachage en Perl, tableaux associatifs en PHP) doit être fait avec des n-uplets.

    Voici un exemple simple de tuples et les dictionnaires, ensemble, à la dernière:

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(
    

[1, 2, 3] est une liste dans laquelle on peut ajouter ou supprimer des éléments.
(1, 2, 3) est un n-uplet dans lequel une fois définie, la modification ne peut pas être fait.

Chaque fois que j'ai besoin de passer dans une collection d'éléments à une fonction, si je veux que la fonction de ne pas changer les valeurs transmises dans - je utiliser des n-uplets.

Sinon si je veux avoir la fonction pour modifier les valeurs, j'utilise de la liste.

Toujours si vous utilisez des bibliothèques externes et la nécessité de passer d'une liste de valeurs d'une fonction et de doute sur l'intégrité des données, l'utilisation d'un n-uplet.

Comme d'autres l'ont mentionné, les Listes et les tuples sont à la fois des conteneurs qui peuvent être utilisés pour stocker des objets python.Les listes sont extensibles et leur contenu peut changer par une cession, d'autre part les tuples sont immuables.

Aussi, les listes ne peuvent pas être utilisés comme clés dans un dictionnaire alors que les tuples peuvent.

ouvrez une console et lancez python.Essayez ceci:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Comme vous pouvez le voir à la dernière, sur la dernière ligne de la liste ont des méthodes suivantes:'ajouter', 'count', 'étendre', 'index', 'insert', 'pop', 'supprimer', 'inverse", "trier"

Maintenant, essayez la même chose pour tuple:

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

Seulement "compter" et "index" à partir de la liste des méthodes apparaît ici.

C'est parce que les tuples sont immuables et qu'elles ne prennent pas en charge toutes les modifications.Au lieu de cela ils sont plus simples et plus rapides dans la mise en œuvre interne.

  • Un n-uplet peut constituer un dictionnaire, parce que c'est immuable.
  • Utiliser des listes si vous avez une collection de données qui ne sont pas besoin d'un accès aléatoire.

Si vous pouvez trouver une solution qui fonctionne avec les tuples, les utiliser, car elle oblige l'immuabilité quel type de lecteurs que vous avez un plus fonctionnelle chemin.Vous avez presque ne le regretterez pas d'aller en bas de la fonctionnelle/immuable chemin.

[1,2,3] est une liste de.

(1,2,3) est un n-uplet et immuable.

(1,2,3) et [1,2,3] peuvent être utilisés de façon interchangeable dans de rares conditions.

Donc, (1,2,3) est un n-uplet et est immuable.Toutes les modifications que vous souhaitez faire besoin de remplacer l'objet.

[1,2,3] est une liste et les éléments peuvent être ajoutés et supprimés.

Liste a plus de fonctionnalités que d'un n-uplet.

(1,2,3) est un n-uplet tout [1,2,3] est une liste de.Un tuple est un objet immuable alors qu'une liste est mutable.

(1,2,3) est un n-uplet et [1,2,3] est une liste de.Vous ou l'autre des deux représentent des séquences de nombres, mais note que les tuples sont immuables et de la liste sont mutables des objets Python.

(1,2,3)-n-uplet [1,2,3]-liste les listes sont mutables sur lesquelles différentes opérations peuvent être effectuées alors que les n-uplets sont immuables qui ne peut pas être prolongé.nous ne pouvons pas ajouter,supprimer ou mettre à jour n'importe quel élément d'un tuple une fois qu'il est créé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top