我有一个 Python 中的 bool 值列表。我想对它们进行 AND(或 OR 或 NOT)并得到结果。以下代码有效,但不是很pythonic。
def apply_and(alist):
if len(alist) > 1:
return alist[0] and apply_and(alist[1:])
else:
return alist[0]
任何关于如何使它更 Pythonic 的建议表示赞赏。
最佳答案
a_list
中所有元素的和
逻辑:
all(a_list)
a_list
中所有元素的逻辑or
:
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
我们可以继续一整天,但是,pythonic 的方式是使用 all
和 any
:-)
顺便说一句,Python没有尾递归消除,所以不要尝试直接翻译LISP代码;-)
关于python - 如何将逻辑运算符应用于python列表中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1790520/