Estoy seguro de que hay una manera más simple de hacer esto que simplemente no se me ocurre.
Estoy llamando a un montón de métodos que devuelven una lista. La lista puede estar vacía. Si la lista no está vacía, quiero devolver el primer elemento; de lo contrario, quiero devolver ninguno. Este código funciona:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Me parece que debería haber un lenguaje simple de una línea para hacer esto, pero por mi vida no puedo pensar en eso. ¿Esta ahí?
Editar:
La razón por la que estoy buscando una expresión de una línea aquí no es que me guste el código increíblemente conciso, sino porque tengo que escribir mucho código como este:
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
Lo que me gustaría hacer sin duda se puede lograr con una función (y probablemente lo será):
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
Publiqué la pregunta porque con frecuencia me sorprende lo que pueden hacer las expresiones simples en Python, y pensé que escribir una función era algo tonto si había una expresión simple que pudiera hacer el truco. Pero al ver estas respuestas, parece que una función es la solución simple.
next(iter(your_list))
, ya que si proporciona un segundo argumento para iter
, le está diciendo que el primer argumento es invocable.
next(iter(your_list), None)
lugar defirst_item(your_list)
asumiryour_list
que no lo esNone
(get_first_list()
yget_second_list()
siempre debe devolver un iterable).