检查所有元素是否全部为假或全部为真的Pythonic方法

13 投票
7 回答
5214 浏览
提问于 2025-04-16 07:48

我想要这个函数的结果是:

  • 所有值都为假(比如 None、0、空字符串) -> 返回 True
  • 所有值都为真 -> 返回 True
  • 其他情况 -> 返回 False

这是我尝试写的代码:

>>> def consistent(x):
...  x_filtered = filter(None, x)
...  return len(x_filtered) in (0, len(x))
...
>>> consistent((0,1))
False
>>> consistent((1,1))
True
>>> consistent((0,0))
True

[附加问题]

这个函数应该叫什么名字呢?

7 个回答

3

在Ignacio Vasquez-Abram的方法基础上,我们会在第一次不匹配的时候就停止:

def unanimous(s):
  it1, it2 = itertools.tee(iter(s))
  it1.next()
  return not any(bool(a)^bool(b) for a,b in itertools.izip(it1,it2))

虽然使用 not reduce(operators.xor, s) 会更简单,但它不会进行短路操作。

11
def all_bools_equal(lst):
    return all(lst) or not any(lst)

查看: http://docs.python.org/library/functions.html#all

查看: http://docs.python.org/library/functions.html#any

24

在编程中,有时候我们需要让程序做一些事情,比如在特定的条件下执行某段代码。这个过程就叫做“条件判断”。简单来说,就是问程序一个问题,如果答案是“是”,就执行某个操作;如果答案是“否”,就执行另一个操作。

比如,你可以想象一个场景:如果今天下雨了,你就带伞;如果没下雨,你就不带伞。这里“下雨”就是条件,而“带伞”或“不带伞”就是根据条件做出的不同选择。

在代码中,这种判断通常用“if”语句来实现。它的基本结构是这样的:

if (条件) {
    // 如果条件为真,执行这段代码
} else {
    // 如果条件为假,执行这段代码
}

通过这种方式,程序就能根据不同的情况做出不同的反应,变得更加灵活和智能。

def unanimous(it):
  it1, it2 = itertools.tee(it)
  return all(it1) or not any(it2)

撰写回答