web-dev-qa-db-fra.com

Obtenir seulement un élément d'une liste à un seul élément en Python?

Quand on sait qu'une liste Python contient toujours un seul élément, existe-t-il un moyen d'y accéder autre que:

mylist[0]

Vous pouvez demander: "Pourquoi voudriez-vous?". La curiosité seule. Il semble y avoir une autre façon de faire tout en Python.

51
Pyderman

Séquence de déballage:

singleitem, = mylist
# Identical in behavior (byte code produced is the same),
# but arguably more readable since a lone trailing comma could be missed:
[singleitem] = mylist

Utilisation explicite du protocole itérateur:

singleitem = next(iter(mylist))

Pop destructrice:

singleitem = mylist.pop()

Indice négatif:

singleitem = mylist[-1]

Défini via une seule itération for (car la variable de boucle reste disponible avec sa dernière valeur à la fin d'une boucle):

for singleitem in mylist: break

Beaucoup d'autres (combinant ou modifiant des bits de ce qui précède, ou s'appuyant autrement sur une itération implicite), mais vous voyez l'idée.

82
ShadowRanger

J'ajouterai que le more_itertools La bibliothèque a un outil qui retourne un élément d’un itérable.

from more_itertools import one


iterable = ["foo"]
one(iterable)
# "foo"

En plus, more_itertools.one déclenche une erreur si l'itérable est vide ou contient plusieurs éléments.

iterable = []
one(iterable)
# ValueError: not enough values to unpack (expected 1, got 0)

iterable = ["foo", "bar"]
one(iterable)
# ValueError: too many values to unpack (expected 1)
13
pylang