检查列表的所有元素是否与for循环中的条件匹配的最佳方法是什么?

时间:2016-08-03 08:06:22

标签: python list for-loop

我的问题与How to check if all elements of a list matches a condition非常相似。 但我找不到在for循环中做同样事情的正确方法。 例如,在python中使用all就像:

>>> items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]]
>>> all(item[2] == 0 for item in items)
False

但是当我想使用类似的方法检查for循环中的所有元素时,就像这样

>>> for item in items:
>>>    if item[2] == 0:
>>>        do sth
>>>    elif all(item[1] != 0)
>>>        do sth

" all"表达式不能在这里使用。是否有任何可能的方式像" elif all(item [2] == 0)"在这里使用。以及如何检查列表中的所有元素是否与for循环中的条件匹配?

6 个答案:

答案 0 :(得分:2)

如果您想拥有ifelse,仍然可以使用any方法:

if any(item[2] == 0 for item in items):
    print('There is an item with item[2] == 0')
else:
    print('There is no item with item[2] == 0')

any来自this answer

答案 1 :(得分:1)

这里:

items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]]

def check_list(items): 
    for item in items:
        if item[2] != 0:
            return False
    return True

print(check_list(items))

如果你想让它更通用一点:

def my_all(enumerable, condition):
    for item in enumerable:
        if not condition(item):
            return False
    return True

print(my_all(items, lambda x: x[2]==0)

答案 2 :(得分:0)

试试这个: -

prinBool = True
for item in items:
    if item[2] != 0:
     prinBool = False
     break
print prinBool

答案 3 :(得分:0)

您可以使用带有for子句的else循环:

for item in items:
    if item[2] != 0:
       print False
       break
else:
    print True

当序列的项目用尽时,即当循环未被else终止时,执行break之后的语句。

答案 4 :(得分:0)

使用functools,会更容易:

from functools import reduce

items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]]
f = lambda y,x : y and x[2] == 0  
reduce(f,items)

答案 5 :(得分:-1)

你的意思是这样吗?

for item in items:
    for x in range (0,3):
        if item[x] == 0:
            print "True"