Как выполнить оператор "if-for" в python?
С python я хотел бы запустить тест по всему списку, и если все утверждения верны для каждого элемента в списке, выполните определенное действие.
Псевдокод: если для каждого x в "списке" выполняется "проверка с участием x", тогда выполните "this".
Кажется, должен быть простой способ сделать это.
Какой синтаксис я должен использовать в python?
Ответы
Ответ 1
Используйте all()
. Он принимает итерабельность в качестве аргумента и возвращает True
, если все записи оцениваются до True
. Пример:
if all((3, True, "abc")):
print "Yes!"
Вам, вероятно, понадобится какое-то генераторное выражение, например
if all(x > 3 for x in lst):
do_stuff()
Ответ 2
>>> x = [True, False, True, False]
>>> all(x)
False
all() возвращает True
, если все элементы в списке True
Аналогично, any() вернет True
, если какой-либо элемент имеет значение true.
Ответ 3
Пример (проверка всех элементов больше 0)
if all(x > 0 for x in list_of_xs):
do_something()
Ранее изначально использовалось понимание списка (if all([x > 0 for x in list_of_xs]):
), которое, как указано delnan (Спасибо), выражало генератор быстрее, поскольку выражение генератора заканчивается в первом False
, тогда как это выражение применяет сравнение ко всем элементам списка.
Однако будьте осторожны с выражением генератора, например:
all(x > 0 for x in list_of_xs)
Если вы используете pylab (запуск ipython как "ipython -pylab" ), вся функция заменяется на numpy.all, которая не обрабатывает правильные выражения генератора.
all([x>0 for x in [3,-1,5]]) ## False
numpy.all([x>0 for x in [3,-1,5]]) ## False
all(x>0 for x in [3,-1,5]) ## False
numpy.all(x>0 for x in [3,-1,5]) ## True
Ответ 4
if reduce(lambda x, y: x and involve(y), yourlist, True):
certain_action()
involve
- это действие, которое вы хотите задействовать для каждого элемента в списке, yourlist
- ваш исходный список, certain_action
- это действие, которое вы хотите выполнить, если все утверждения верны.
Ответ 5
Я считаю, что вам нужен метод all()
:
$ python
>>> help(all)
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
Ответ 6
all()
один не работает, если вам нужна дополнительная фаза map()
.
см. ниже:
all((x==0 for x in xrange(1000))
и
all([x==0 for x in xrange(1000)])
2-й пример выполнит 1000, сравните, даже второй сравните, сделайте весь результат ложным.