我想检查列表中是否至少有一个非零值。如果有一个值不为零,则返回true;如果没有,则返回false。
例如,如果我有一个列表[0, 1, 2]
,那将返回true,因为存在0以外的值。列表[0, 0, 0]
将返回false,因为只有零。
我尝试了if not 0 in [0, 1, 2]
,但这确实有效,因为允许使用零。如果列表是[0, 1, 2]
,我可以遍历[1, 2]
并查看是否存在任何这些值,但这对我来说效率非常低;另外,我希望它是动态的。
答案 0 :(得分:2)
只需使用any
,它的设计完全符合您的要求:
In [1]: l = [0, 1, 2]
In [2]: any(l)
Out[2]: True
In [4]: l = []
In [5]: any(l)
Out[5]: False
In [6]: l = [0,0,0]
In [7]: any(l)
Out[7]: False
如果任何值非零,它将短路并返回True,如果它到达列表的末尾或者你传递一个空列表,它将返回False。
所以在你的代码中:
if any(some_list):
# found at least one non-zero
else:
# empty or all zero
如果您想检查数字是否大于1,您可以在表达式中添加一些逻辑:
if any(i > 1 for i in some_list)
实施逻辑位于链接的文档中:
def any(iterable):
for element in iterable:
if element:
return True
return False
要注意的一件事是任何将为任何 truthy 值返回True,如非空列表,元组,True等等。对于任何< em> falsey 值如空列表,元组,False等。所以在某些情况下你需要明确检查。
答案 1 :(得分:1)
您可能想知道any
的工作原理。像这样:
def check_list(nums):
for n in nums:
if n: # check if the number is not zero
return True # immediately return True
return False # reached the end of the list already but no luck, so return False
check_list([0,1,2]) == True
check_list([0,0,0]) == False
答案 2 :(得分:0)
我有一个使用count的简单解决方案
def has_other(data, value):
return data.count(value) != len(data)
a = [0, 1, 2]
b = [0, 0, 0]
print(has_other(a, 0)) # True
print(has_other(b, 0)) # False