Вы можете использовать itertools.dropwhile
, чтобы пропустить элементы, для которых предоставленная функция возвращает False
, а затем взять первый элемент из остальных (если есть). Если вам нужен индекс, а не элемент, включите enumerate
из раздела рецептов itertools
документы .
Чтобы изменить значения истинности, возвращаемые предоставленной функцией, используйте lambda
(lambda x: not pred (x)
, где pred
- предоставленная функция) или именованную оболочку:
def negate(f):
def wrapped(x):
return not f(x)
return wrapped
Пример:
def odd(x): return x % 2 == 1
itertools.dropwhile(negate(odd), [2,4,1]).next()
# => 1
Будет выброшено StopIteration
, если не найдено ни одного подходящего предмета; оберните его в свою собственную функцию, чтобы вместо этого выдать исключение по вашему выбору.