python - 如何将逻辑运算符应用于python列表中的所有元素

标签 python

我有一个 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 的方式是使用 allany :-)

顺便说一句,Python没有尾递归消除,所以不要尝试直接翻译LISP代码;-)

关于python - 如何将逻辑运算符应用于python列表中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1790520/

相关文章:

python - 使用 python opencv 在网络摄像头上切换图像过滤器

python用语言环境设置自己的货币

python - 为返回 api 的 json 自定义 flask 错误处理程序

python - 如何将嵌套字典的内容写入特定格式的文件?

python - 用户定义的Python函数中的groupby不起作用

python - 尝试使用 Pandas 从数据帧获取列时出现关键字错误

python - wxPython:退出全屏

Python - 从不断变化的文本文件更新实时图形

python - 无法在另一个python脚本中使用python函数的属性

基于 Python 扭曲事件的 jabber/xmpp/email/irc/chat 客户端,用于监听和响应消息