TortoiseSVN может показать изменения изображения бок о бок, который действительно полезен. Я использовал его с различными командами с большим уровнем успеха. Художники любили иметь способность откатывать вещи (после того, как они привыкли к понятиям). Действительно занимает много места, все же.
Логические и
во всех элементах в a_list
:
all(a_list)
Логический или
для всех элементов в a_list
:
any(a_list)
Если вы чувствуете творческий подход, вы также можете сделать:
import operator
def my_all(a_list):
return reduce(operator.and_, a_list, True)
def my_any(a_list):
return reduce(operator.or_, a_list, False)
имейте в виду, что они не оцениваются при коротком замыкании , в то время как встроенные; -)
еще один забавный способ:
def my_all_v2(a_list):
return len(filter(None,a_list)) == len(a_list)
def my_any_v2(a_list):
return len(filter(None,a_list)) > 0
и еще один:
def my_all_v3(a_list):
for i in a_list:
if not i:
return False
return True
def my_any_v3(a_list):
for i in a_list:
if i:
return True
return False
, и мы могли бы продолжать весь день, но да, питонический способ - использовать все
и любой
: -)
Кстати, в Python нет исключения хвостовой рекурсии, поэтому не пытайтесь напрямую транслировать код LISP; -)
Reduce может сделать это:
reduce(lambda a,b: a and b, alist, True)
Как уже упоминалось, all - самый лаконичный способ сделать это. Но сокращение отвечает на более общий вопрос: «Как применить логический оператор ко всем элементам в списке Python?»
The idiom for such operations is to use the reduce
function (global in Python 2.X, in module functools
in Python 3.X) with an appropriate binary operator either taken from the operator
module or coded explicitly. In your case, it's operator.and_
reduce(operator.and_, [True, True, False])
Как показывают другие ответы, существует несколько способов выполнить эту задачу. Вот еще одно решение, использующее функции из стандартной библиотеки:
from functools import partial
apply_and = all
apply_or = any
apply_not = partial(map, lambda x: not x)
if __name__ == "__main__":
ls = [True, True, False, True, False, True]
print "Original: ", ls
print "and: ", apply_and(ls)
print "or: ", apply_or(ls)
print "not: ", apply_not(ls)
Операция И и ИЛИ проста:
>>> some_list = [True] * 100
# OR
>>> any(some_list)
True
#AND
>>> all(some_list)
True
>>> some_list[0] = False
>>> any(some_list)
True
>>> all(some_list)
False
Замечание также довольно просто:
>>> [not x for x in some_list]
[True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Конечно, то, как вы будете использовать эти результаты, может потребовать некоторых интересных приложений теоремы ДеМоргана.