Глупый вопрос: мне нужен идиоматический способ найти первый элемент в списке, который соответствует предикату.
Текущий код довольно уродливый:
[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
Но совершенно безвкусно начать заполнять код такими полезными функциями (и люди, вероятно, не заметят, что они уже есть, поэтому они, как правило, повторяются с течением времени), если есть встроенные вставки, которые уже предоставляют одинаковые.