python - 如何检查列表的所有元素是否与条件匹配?

我有一个由20000个列表组成的列表。我使用每个列表的第三个元素作为标记。我想在此列表上执行一些操作,只要至少有一个元素的标志为0,就如下所示:

my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]

开始时,所有标志都是0。我使用while循环检查是否至少有一个元素的标志为0:
def check(list_):
    for item in list_:
        if item[2] == 0:
            return True
    return False

如果check(my_list)返回True,则继续处理列表:
while check(my_list):
    for item in my_list:
        if condition:
            item[2] = 1
        else:
            do_sth()

实际上,我想在遍历时删除列表中的元素,但不允许在遍历时删除项目。
原始的“我的”列表没有标志:
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]

由于在迭代时无法删除元素,所以我发明了这些标志。但是my_list包含许多项,并且while循环在每个for循环中读取所有项,并且它会消耗大量时间!你有什么建议吗?


最佳答案:

这里的最佳答案是使用all(),这是这种情况下内置的。我们将此与一个generator expression结合,以产生您想要的干净和有效的结果。例如:

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

并且,对于他的过滤示例,列表理解:
>>> [x for x in items if x[2] == 0]
[[1, 2, 0], [1, 2, 0]]

如果要检查至少一个元素为0,则更好的选项是使用可读性更强的any()
>>> any(item[2] == 0 for item in items)
True