Jestem pewien, że istnieje prostszy sposób na zrobienie tego, co po prostu mi się nie zdarza.
Nazywam wiele metod, które zwracają listę. Lista może być pusta. Jeśli lista nie jest pusta, chcę zwrócić pierwszą pozycję; w przeciwnym razie chcę zwrócić Brak. Ten kod działa:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Wydaje mi się, że powinien istnieć prosty, jednowierszowy idiom do zrobienia tego, ale przez całe życie nie mogę o tym myśleć. Jest tu?
Edytować:
Powodem, dla którego szukam tutaj wyrażenia jednowierszowego, nie jest to, że lubię niewiarygodnie zwięzły kod, ale dlatego, że muszę napisać dużo takiego kodu:
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
To, co chciałbym robić, z pewnością można osiągnąć za pomocą funkcji (i prawdopodobnie będzie):
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
Zadałem pytanie, ponieważ często jestem zaskoczony tym, co potrafią proste wyrażenia w Pythonie, i pomyślałem, że napisanie funkcji było głupią rzeczą, gdyby istniało proste wyrażenie. Ale widząc te odpowiedzi, wydaje się, że funkcja jest prostym rozwiązaniem.
next(iter(your_list))
, ponieważ jeśli podasz drugi argument iter
, mówisz mu, że pierwszy argument jest możliwy do wywołania.
next(iter(your_list), None)
zamiastfirst_item(your_list)
zakładać, żeyour_list
nieNone
(get_first_list()
iget_second_list()
zawsze musi zwrócić iterowalną).