检查列表中是否存在除特定值以外的值

时间:2016-03-03 23:05:19

标签: list python-3.x

我想检查列表中是否至少有一个非零值。如果有一个值不为零,则返回true;如果没有,则返回false。

例如,如果我有一个列表[0, 1, 2],那将返回true,因为存在0以外的值。列表[0, 0, 0]将返回false,因为只有零。

我尝试了if not 0 in [0, 1, 2],但这确实有效,因为允许使用零。如果列表是[0, 1, 2],我可以遍历[1, 2]并查看是否存在任何这些值,但这对我来说效率非常低;另外,我希望它是动态的。

3 个答案:

答案 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