检查所有元素是否全部为假或全部为真的Pythonic方法
我想要这个函数的结果是:
- 所有值都为假(比如 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)
24
在编程中,有时候我们需要让程序做一些事情,比如在特定的条件下执行某段代码。这个过程就叫做“条件判断”。简单来说,就是问程序一个问题,如果答案是“是”,就执行某个操作;如果答案是“否”,就执行另一个操作。
比如,你可以想象一个场景:如果今天下雨了,你就带伞;如果没下雨,你就不带伞。这里“下雨”就是条件,而“带伞”或“不带伞”就是根据条件做出的不同选择。
在代码中,这种判断通常用“if”语句来实现。它的基本结构是这样的:
if (条件) { // 如果条件为真,执行这段代码 } else { // 如果条件为假,执行这段代码 }
通过这种方式,程序就能根据不同的情况做出不同的反应,变得更加灵活和智能。
def unanimous(it):
it1, it2 = itertools.tee(it)
return all(it1) or not any(it2)