182 votes

Comment obtenir le nième élément d'une liste en python ou un élément par défaut s'il n'est pas disponible

Je cherche un équivalent en python de dictionary.get(key, default) pour les listes. Existe-t-il un idiome unique pour obtenir le nième élément d'une liste ou une valeur par défaut si elle n'est pas disponible ?

Par exemple, étant donné une liste maListe, je voudrais obtenir maListe[0], ou 5 si maListe est une liste vide.

153voto

gruszczy Points 14097
x[index] if len(x) > index else default

69voto

Tim Pietzcker Points 146308
try:
   a = b[n]
except IndexError:
   a = default

Edit : J'ai supprimé la vérification de TypeError - il est probablement préférable de laisser l'appelant s'en occuper.

45voto

gnibbler Points 103484
(a[n:]+[default])[0]

C'est probablement mieux comme a s'agrandit

(a[n:n+1]+[default])[0]

Cela fonctionne parce que si a[n:] est une liste vide si n => len(a)

Voici un exemple de fonctionnement avec range(5)

>>> range(5)[3:4]
[3]
>>> range(5)[4:5]
[4]
>>> range(5)[5:6]
[]
>>> range(5)[6:7]
[]

Et l'expression complète

>>> (range(5)[3:4]+[999])[0]
3
>>> (range(5)[4:5]+[999])[0]
4
>>> (range(5)[5:6]+[999])[0]
999
>>> (range(5)[6:7]+[999])[0]
999

42voto

Joachim Jablon Points 123

Je viens de découvrir que :

next(iter(myList), 5)

iter(l) renvoie un itérateur sur myList , next() consomme le premier élément de l'itérateur, et lève un StopIteration erreur sauf si elle est appelée avec une valeur par défaut, ce qui est le cas ici, le deuxième argument, 5

Cela ne fonctionne que lorsque vous voulez le 1er élément, ce qui est le cas dans votre exemple, mais pas dans le texte de votre question, donc...

De plus, il n'est pas nécessaire de créer des listes temporaires en mémoire et il fonctionne pour tout type d'itérable, même s'il n'a pas de nom (voir le commentaire de Xiong Chiamiov sur la réponse de gruszczy).

26voto

(L[n:n+1] or [somedefault])[0]

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