Я уверен, что есть более простой способ сделать это, что просто не происходит со мной.
Я вызываю кучу методов, которые возвращают список. Список может быть пустым. Если список не пустой, я хочу вернуть первый элемент; в противном случае я хочу вернуть None. Этот код работает:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Мне кажется, что для этого должна быть простая однострочная идиома, но я не могу об этом думать. Здесь?
Редактировать:
Причина, по которой я ищу здесь однострочное выражение, не в том, что мне нравится невероятно лаконичный код, а в том, что мне приходится писать много такого кода:
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
То, что я хотел бы сделать, безусловно, может быть выполнено с помощью функции (и, вероятно, будет):
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
Я опубликовал вопрос, потому что меня часто удивляет, что могут делать простые выражения в Python, и я думал, что написание функции было бы глупо, если бы существовало простое выражение, которое могло бы сработать. Но, увидев эти ответы, кажется, что функция - это простое решение.
next(iter(your_list))
, поскольку, если вы предоставляете второй аргумент iter
, вы говорите, что первый аргумент может быть вызван.
next(iter(your_list), None)
вместоfirst_item(your_list)
предположения,your_list
что нетNone
(get_first_list()
иget_second_list()
всегда должны возвращать итеративный).