Python - функциональная “находка”?

Мне нужна функция, которая способна к итерации по набору, вызыванию предоставленной функции с элементом набора в качестве параметра и возврата параметра, или это - индекс при "Верном" получении из предоставленной функции.

Это - somethong как это:

def find(f, seq, index_only=True, item_only=False):
     """Return first item in sequence where f(item) == True."""
     index = 0
     for item in seq:
         if f(item):
             if index_only:
                 return index
             if item_only:
                 return item
             return index, item
         index+= 1
     raise KeyError

Таким образом, я задаюсь вопросом, похож ли там на что-нибудь это в стандартном наборе инструментов Python?

6
задан Art 3 March 2010 в 14:20
поделиться

3 ответа

Вы можете использовать itertools.dropwhile, чтобы пропустить элементы, для которых поставляемая функция возвращает False, а затем взять первый элемент из оставшихся (если они есть). Если вам нужен индекс, а не элемент, используйте enumerate из раздела Recipes в itertools docs.

Чтобы обратить истинностные значения, возвращаемые поставляемой функцией, используйте 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, если не найдено ни одного подходящего элемента; оберните это в собственную функцию, чтобы вместо этого вызвать исключение по вашему выбору.

2
ответ дан 16 December 2019 в 21:38
поделиться

Попробуйте itertools и, например, ifilter .

3
ответ дан 16 December 2019 в 21:38
поделиться

Я не думаю, что есть такая функция с такой точной семантикой, и в любом случае ваша функция короткая, достаточно хорошая, и вы можете легко улучшить ее для дальнейшего использования, поэтому используйте ее.

потому что простое лучше сложного.

3
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: