430 votes

Langage Python pour retourner le premier élément ou None

Je suis sûr qu'il y a un moyen plus simple de faire ce qui est juste ne se produisent pas pour moi.

Je suis d'appeler un tas de méthodes qui renvoient une liste. La liste peut être vide. Si la liste est non vide, je veux retourner le premier élément; sinon, je veux retourner Aucun. Ce code fonctionne:

list = get_list()
if len(list) > 0: return list[0]
return None

Il me semble qu'il devrait y avoir une simple ligne idiome pour le faire, mais pour la vie de moi je ne peux pas penser à elle. Est-il?

Edit:

La raison que je suis à la recherche d'une ligne d'expression ici n'est pas que j'aime incroyablement laconique code, mais parce que je vais avoir à é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 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 posté la question, parce que je suis souvent surpris par ce que des expressions simples en Python peut faire, et j'ai pensé que l'écriture d'une fonction était une chose stupide à faire si il y avait une expression simple pourrait faire l'affaire. Mais, en voyant ces réponses, il semble comme une fonction est la solution la plus simple.

358voto

J.F. Sebastian Points 102961
<pre><code></code><p>Exemple :</p><pre><code></code></pre><p>Une autre option est d’inline la fonction ci-dessus :</p><pre><code></code></pre><p><code></code>vous pourriez écrire :</p><pre><code></code></pre><p>Où :</p><pre><code></code></pre></pre>

278voto

efotinis Points 6338

Le meilleur moyen est la suivante :

Vous pourriez aussi le faire en une seule ligne, mais il est beaucoup plus difficile pour le programmeur comme suit :

100voto

recursive Points 34729
<pre><code></code><p>Cela devrait fonctionner.</p><p>BTW je n’utiliser la liste des variables, car qui remplace la fonction list() de builtin.</p><p>Edit : j’ai eu un peu plus simple, mais la mauvaise version ici plus tôt.</p></pre>

11voto

gotgenes Points 8667

L'OP solution est presque là, il y a juste quelques petites choses pour le rendre plus Pythonic.

Pour l'un, il n'est pas nécessaire pour obtenir la longueur de la liste. Vide les listes en Python la valeur False dans un si vérifier. Dites simplement

if list:

En outre, c'est une très Mauvaise Idée de les affecter à des variables qui se chevauchent avec les mots réservés. "liste" est un mot réservé en Python.

Donc, nous allons changer cela pour l'

some_list = get_list()
if some_list:

Un point vraiment important que beaucoup de solutions ici, mademoiselle, c'est que toutes les fonctions Python/méthodes retournent Aucun par défaut. Essayez ce qui suit ci-dessous.

def does_nothing():
    pass

foo = does_nothing()
print foo

Sauf si vous avez besoin de retourner Aucun pour mettre fin à une fonction au début, c'est inutile de renvoyer explicitement Aucun. Très succinctement, il suffit de retourner le premier élément, s'il existe.

some_list = get_list()
if some_list:
    return list[0]

Et enfin, c'est peut-être implicite, mais juste pour être explicite (parce explicite est mieux que implicites), vous ne devriez pas avoir votre fonction obtenir la liste à partir d'une autre fonction; il suffit de le passer en tant que paramètre. Donc, le résultat final serait

def get_first_item(some_list): 
    if some_list:
        return list[0]

my_list = get_list()
first_item = get_first_item(my_list)

Comme je l'ai dit, l'OP était près de là, et juste quelques touches de lui donner le Python de la saveur que vous recherchez.

3voto

Coady Points 11374
for item in get_list():
    return item

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