测试 python 列表的所有元素是不是为 False
Posted
技术标签:
【中文标题】测试 python 列表的所有元素是不是为 False【英文标题】:Test if all elements of a python list are False测试 python 列表的所有元素是否为 False 【发布时间】:2015-09-14 23:09:29 【问题描述】:由于所有元素都是“假”,如何返回“假”?
给定的列表是:
data = [False, False, False]
【问题讨论】:
【参考方案1】:使用any
:
>>> data = [False, False, False]
>>> not any(data)
True
any
将返回 True 如果迭代中有任何真值。
【讨论】:
@Ajay,使用all
:all(not x for x in data)
注意:如果您在数组中包含非布尔数据,这将不起作用。
@HaroldSeefeld,试试not any([0, 0, 0])
@HaroldSeefeld 会的,python 可以测试所有内置类型的真实性
0, [], ,()..etc 都是 False 非布尔数据..:)【参考方案2】:
基本上有两个函数处理可迭代对象并根据序列中元素的布尔值计算结果返回 True 或 False。
如果iterable
的所有元素都被视为真值(如reduce(operator.and_, iterable)
),则all(iterable)
返回True。
如果iterable
的至少一个元素为真值,any(iterable)
返回 True(同样,使用函数式的东西,reduce(operator.or_, iterable)
)。
使用all
函数,您可以将operator.not_
映射到您的列表上,或者只使用否定值构建一个新序列并检查新序列的所有元素是否为真:
>>> all(not element for element in data)
使用any
函数,您可以检查至少一个元素是否为真,然后否定结果,因为如果有一个真元素,您需要返回False
:
>>> not any(data)
根据德摩根定律,这两个变体将返回相同的结果,但我更喜欢最后一个(使用any
),因为它更短,更易读(并且可以直观地理解为“没有” t 数据中的真正价值”)并且更高效(因为您没有构建任何额外的序列)。
【讨论】:
any()
解决方案将在找到 True 值后立即停止,因此通常会更快。【参考方案3】:
这是使用生成器表达式的另一种方法:
data = [False, False, False]
try:
out = next(elt for elt in data if elt) # holds the value of first non-empty element
except StopIteration:
print("all elements are empty")
data = [[], [], [1], [2]]
try:
out = next(elt for elt in data if elt) # [1]
except StopIteration:
print("all elements are empty")
【讨论】:
【参考方案4】:我们都知道False
也被认为是0
,所以如果所有元素中的sum
是0
,这意味着列表中的所有元素都是False
。
但既然你想要:
返回'false',因为所有元素都是'false'
为此,请使用否定运算符not
或!
。
data = [False, False, False]
print(sum(data)!=0) #False
【讨论】:
【参考方案5】:True 和 False 是 0 和 1 的布尔表示。 True = 1 和 Flase = 0
data = [False, False, False]
if sum(data)== 0:
return False
if sum(data) == len(data):
return True
sum(data) 表示将 1 和 0 加上一个列表中的 True(1) 和 False(0) 各自的值。
全为False的情况下总和为0, 并且在 all True 的情况下,总和 等于列表的长度。 除 0 和 1 以外的任何总和值都表示并非全部为 False 或 True。
【讨论】:
以上是关于测试 python 列表的所有元素是不是为 False的主要内容,如果未能解决你的问题,请参考以下文章
PYTHON学习0030:函数---内置方法----2019-6-23
For循环将列表的所有元素放入不同的文本文件中,而不是在python中遍历每个元素