测试python列表中的所有元素是否为False


73

由于所有元素均为“ false”,如何返回“ false”?

给定的列表是:

data = [False, False, False]

Answers:


141

使用any

>>> data = [False, False, False]
>>> not any(data)
True

any 如果可迭代项中有任何真值,则将返回True。


5
@Ajay,要使用allall(not x for x in data)
falsetru

注意:如果要在数组中包含非布尔数据,则此方法将无效。
2015年

@HaroldSeefeld,尝试not any([0, 0, 0])
falsetru

3
@HaroldSeefeld它将,python可以测试所有内置类型的真实性
maniexx

2
0,[],{},().. etc都是False非布尔数据.. :)
Iron Fist

30

基本上,有两个函数处理一个Iterable并根据序列中的哪个布尔值元素返回True或False。

  1. all(iterable)如果将的所有元素iterable都视为true值(如reduce(operator.and_, iterable)),则返回True 。

  2. any(iterable)如果中的至少一个元素为iterabletrue值(同样,使用函数式东西reduce(operator.or_, iterable)),则返回True 。

使用该all函数,您可以映射operator.not_到列表中,或仅使用取反的值构建一个新序列,并检查新序列的所有元素是否正确:

>>> all(not element for element in data)

使用此any函数,您可以检查至少一个元素为true,然后取反,因为False如果存在true元素,则需要返回:

>>> not any(data)

根据De Morgan的定律,这两个变体将返回相同的结果,但是我更喜欢最后一个变体(使用any),因为它更短,更易读(并且可以直观地理解为“数据中没有真正的价值” ”),效率更高(因为您无需构建任何额外的序列)。


7
any()它找到一个真正有价值的解决方案,就立即停止,因此通常会更快。
Martin Evans 2015年

-4

伙计们,来吧,他要求返回True是否存在True。说的都是一样,如果全部为假,则为假。

any(data)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.