python - 如何检查列表的所有元素是否符合条件?

标签 python list for-loop while-loop

我有一个包含大约 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 中的一个元素,但不允许在迭代时删除项目。

原始 my_list 没有标记:

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(flag == 0 for (_, _, flag) in items)
True
>>> items = [[1, 2, 0], [1, 2, 1], [1, 2, 0]]
>>> all(flag == 0 for (_, _, flag) in items)
False

注意 all(flag == 0 for (_, _, flag) in items) 直接等价于 all(item[2] == 0 for item in items) ,在这种情况下阅读起来会更好一些。

并且,对于过滤器示例,列表推导(当然,您可以在适当的情况下使用生成器表达式):

>>> [x for x in items if x[2] == 0]
[[1, 2, 0], [1, 2, 0]]

如果要检查至少一个元素为 0,更好的选择是使用 any()哪个更具可读性:

>>> any(flag == 0 for (_, _, flag) in items)
True

关于python - 如何检查列表的所有元素是否符合条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666163/

相关文章:

python - Pandas 数据框列上的子字符串

c++ - 列表中的 std::min_element 不返回最小值

java - 在遍历列表时按索引从列表中删除项目

excel - 嵌套 For 循环替代方案或优化

python - 不同数量的嵌套 for 循环

Python DataFrame 如何从日期时间戳中分割或提取日期

python - 测量字节码使用情况

python - 如何在保留结构的同时遍历列表列表

r - 将嵌套 For 循环与滚动函数转换为应用

java - Python 套接字从 Java PrintWriter 套接字接收不完整的消息