Подтвердить что ты не робот

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

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

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

Как можно pythonically.

4b9b3361

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

Ответ 2

Используйте оператор 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