любой () функционирует в Python с обратным вызовом

Библиотека стандарта Python определяет any() функция это

Возвратите True, если какой-либо элемент повторяемого верен. Если повторяемое пусто, возвратите False.

Это проверяет, только если элементы оценивают к True. Что я хочу, чтобы это было в состоянии, так определите обратный вызов, чтобы сказать, отвечает ли элемент всем требованиям как:

any([1, 2, 'joe'], lambda e: isinstance(e, int) and e > 0)

59
задан Stephan202 6 January 2010 в 12:20
поделиться

4 ответа

Как насчет:

>>> any(isinstance(e, int) and e > 0 for e in [1,2,'joe'])
True

Также работает с all() конечно:

>>> all(isinstance(e, int) and e > 0 for e in [1,2,'joe'])
False
105
ответ дан 24 November 2019 в 18:10
поделиться

любая функция возвращает True, когда любое условие равно True.

>>> any(isinstance(e, int) and e > 0 for e in [0 ,0, 1])
True # Returns True because 1 is greater than 0.


>>> any(isinstance(e, int) and e > 0 for e in [0 ,0, 0])
False # Returns False because not a single condition is True.

На самом деле, понятие любой функции взято из Lisp или вы можете сказать из подхода к программированию функций. Есть еще одна функция, которая прямо противоположна ей - это all

>>> all(isinstance(e, int) and e > 0 for e in [1, 33, 22])
True # Returns True when all the condition satisfies.

>>> all(isinstance(e, int) and e > 0 for e in [1, 0, 1])
False # Returns False when a single condition fails.

Эти две функции действительно круты при правильном использовании.

19
ответ дан 24 November 2019 в 18:10
поделиться

Следует использовать "выражение-генератор" - то есть языковую конструкцию, которая может потреблять итераторы и применять к ним фильтры и выражения в одной строке:

Например, (i ** 2 for i in xrange(10)) является генератором для квадрата первых 10 натуральных чисел (от 0 до 9)

Они также позволяют использовать выражение "if" для фильтрации итенов в выражении "for", так что в Вашем примере Вы можете использовать:

any (e for e in [1, 2, 'joe'] if isinstance(e, int) and e > 0)
8
ответ дан 24 November 2019 в 18:10
поделиться

фильтр может работать, плюс он возвращает вам совпадающие элементы

>>> filter(lambda e: isinstance(e, int) and e > 0, [1,2,'joe'])
[1, 2]
2
ответ дан 24 November 2019 в 18:10
поделиться
Другие вопросы по тегам:

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