Верните первый элемент в список, соответствующий условию

У меня есть функция. matchCondition(a) , которое принимает целое число и возвращает True или False.

У меня есть список из 10 целых чисел. Я хочу вернуть первый элемент в списке (в том же порядке, что и исходный список), в котором matchCondition возвращает True.

Как можно питонно.

 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 он возвращает итерируемый объект.

Используйте оператор break :

 for x in lis: if matchCondition(x): print x break #condition met now break out of the loop 

теперь x содержит элемент, который вы хотели.

доказательство:

 >>> for x in xrange(10): ....: if x==5: ....: break ....: >>> x >>> 5