Я впевнений, що є простіший спосіб зробити це, який мені просто не приходить.
Я закликаю купу методів, які повертають список. Список може бути порожнім. Якщо список не порожній, я хочу повернути перший елемент; інакше я хочу повернути жодного. Цей код працює:
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()
завжди потрібно повертати ітерабельний).