Я хочу идиоматический способ найти первый элемент в списке, который соответствует предикату.
Текущий код довольно уродлив:
[x for x in seq if predicate(x)][0]
Я думал об изменении его на:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Но должно быть что-то более элегантное ... И было бы неплохо, если бы оно возвращало None
значение, а не вызывало исключение, если совпадение не найдено.
Я знаю, что мог бы просто определить функцию как:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Но начинать заполнение кода такими служебными функциями довольно безвкусно (и люди, вероятно, не заметят, что они уже есть, поэтому они имеют тенденцию повторяться со временем), если есть встроенные модули, которые уже предоставляют то же самое.