Je suis sûr qu'il existe un moyen plus simple de le faire qui ne m'est tout simplement pas venu à l'esprit.
J'appelle un tas de méthodes qui renvoient une liste. La liste est peut-être vide. Si la liste n'est pas vide, je veux retourner le premier élément; sinon, je veux retourner Aucun. Ce code fonctionne:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Il me semble qu'il devrait y avoir un idiome d'une seule ligne pour faire cela, mais pour la vie de moi, je ne peux pas y penser. Y a-t-il?
Éditer:
La raison pour laquelle je recherche une expression sur une ligne ici n'est pas que j'aime le code incroyablement concis, mais parce que je dois écrire beaucoup de code comme ceci:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
Ce que j'aimerais faire peut certainement être accompli avec une fonction (et le sera probablement):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y = first_item(get_second_list())
if y:
# do something with y
J'ai posé la question parce que je suis souvent surpris par ce que les expressions simples en Python peuvent faire, et je pensais que l'écriture d'une fonction était une chose stupide à faire si une expression simple pouvait faire l'affaire. Mais en voyant ces réponses, il semble qu'une fonction soit la solution simple.
next(iter(your_list))
, puisque si vous fournissez un deuxième argument iter
, vous lui dites que le premier argument peut être appelé.
next(iter(your_list), None)
au lieu defirst_item(your_list)
supposer que ceyour_list
n'est pas le casNone
(get_first_list()
etget_second_list()
doit toujours renvoyer un itérable).