Не одна функция, но вы можете сделать это довольно легко:
>>> test = lambda c: c == 'x'
>>> data = ['a', 'b', 'c', 'x', 'y', 'z', 'x']
>>> map(test, data).index(True)
3
>>>
Если вы не хотите оценивать весь список сразу, вы можете использовать itertools, но это не так красиво:
>>> from itertools import imap, ifilter
>>> from operator import itemgetter
>>> test = lambda c: c == 'x'
>>> data = ['a', 'b', 'c', 'x', 'y', 'z']
>>> ifilter(itemgetter(1), enumerate(imap(test, data))).next()[0]
3
>>>
Просто использование выражения генератора, вероятно, более читабельно, чем itertools
.
Примечание в Python3, map
и filter
возвращают ленивые итераторы, и вы можете просто использовать:
from operator import itemgetter
test = lambda c: c == 'x'
data = ['a', 'b', 'c', 'x', 'y', 'z']
next(filter(itemgetter(1), enumerate(map(test, data))))[0] # 3