Tenho certeza de que há uma maneira mais simples de fazer isso que simplesmente não está ocorrendo para mim.
Estou chamando um monte de métodos que retornam uma lista. A lista pode estar vazia. Se a lista não estiver vazia, desejo retornar o primeiro item; caso contrário, desejo retornar Nenhum. Este código funciona:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Parece-me que deveria haver um idioma de uma linha simples para fazer isso, mas para a minha vida não consigo pensar nisso. Existe?
Editar:
A razão pela qual estou procurando uma expressão de uma linha aqui não é que eu goste de código incrivelmente conciso, mas porque estou tendo que escrever muito código assim:
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
O que eu gostaria de fazer certamente pode ser realizado com uma função (e provavelmente 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
Eu postei a pergunta porque frequentemente fico surpreso com o que expressões simples em Python podem fazer, e achei que escrever uma função era algo tolo de fazer se houvesse uma expressão simples que pudesse resolver o problema. Mas, vendo essas respostas, parece que uma função é a solução simples.
next(iter(your_list))
, se você fornecer um segundo argumento iter
, estará dizendo que o primeiro argumento é passível de chamada.
next(iter(your_list), None)
vez defirst_item(your_list)
assumir queyour_list
não éNone
(get_first_list()
eget_second_list()
sempre deve retornar um iterável).