Ответ 1
next(x for x in lst if matchCondition(x))
должен работать, но он будет поднимать StopIteration
, если ни один из элементов в списке не соответствует. Вы можете подавить это, предоставив второй аргумент next
:
next((x for x in lst if matchCondition(x)), None)
который вернет None
, если ничего не будет найдено.
Демо:
>>> next(x for x in range(10) if x == 7) #This is a silly way to write 7 ...
7
>>> next(x for x in range(10) if x == 11)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> next((x for x in range(10) if x == 7), None)
7
>>> print next((x for x in range(10) if x == 11), None)
None
Наконец, только для полноты, если вы хотите, чтобы все элементы, которые совпадали в списке, это то, что встроенная функция filter
предназначена для:
all_matching = filter(matchCondition,lst)
В python2.x это возвращает список, но в python3.x он возвращает итерируемый объект.