当前位置: 首页 > 知识库问答 >
问题:

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

司寇嘉茂
2023-03-14
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 = [["a", "b"], ["c", "d"], ["e", "f"], .....]

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

共有1个答案

谭曦
2023-03-14

这里最好的答案是使用all(),这是这种情况的内置工具。我们将此与生成器表达式结合起来,干净高效地产生您想要的结果。例如:

>>> 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)的flag==0)all(项目中的项目的item[2]==0)直接等价,在这种情况下读起来稍微好一些。

对于筛选器示例,还有一个列表理解(当然,您可以在适当的地方使用生成器表达式):

>>> [x for x in items if x[2] == 0]
[[1, 2, 0], [1, 2, 0]]
>>> any(flag == 0 for (_, _, flag) in items)
True
 类似资料:
  • 问题内容: 我有这样的df: 以及物品清单: 我的目标是从中获取至少包含2个元素的所有行。 我想出了以下解决方案: 这给了我我想要的,但是就可伸缩性而言,它可能不是最佳的解决方案。是否有任何“向量化”解决方案?谢谢 问题答案: 我会建立一个Series列表,然后应用vectorized : 它给出了预期的结果:

  • 问题内容: 我需要以下功能: 输入: 输出: 如果输入列表中的所有元素使用标准相等运算符求值彼此相等; 除此以外。 性能:当然,我不希望产生任何不必要的开销。 我觉得最好: 遍历列表 比较相邻元素 和AND所有结果布尔值 但我不确定最Pythonic的方法是什么。 问题答案: 通用方法: 单线: 也是单线的: 这三个版本之间的区别在于: 在内容中必须是可哈希的。 并且可以使用任何迭代器,但chec

  • 我有一个包含有4个参数(x,y,iD和myType)的对象的ArrayList。我想验证这个ArrayList中是否有具有特定坐标的对象,独立于它们的iD和myType参数。我想使用但当对象只有一个参数时。 以下是全部代码: 例如,如果我想验证是否有一个具有坐标(3.5,4.5)的对象,我应该如何继续?有没有简单的方法? 谢谢你的帮忙

  • 问题内容: 只会给出列表中第一个出现的项目。有没有整齐的技巧可以返回列表中的所有索引? 问题答案: 你可以使用列表理解:

  • 本文向大家介绍检查列表是否包含Python中的所有唯一元素,包括了检查列表是否包含Python中的所有唯一元素的使用技巧和注意事项,需要的朋友参考一下 python中的列表可以包含所有元素,这些元素可能是唯一的,也可能不是唯一的。但是对于需要特殊元素的情况,例如标记班级不同卷号的出勤率。以下是可以使用的方法。 用 python集是无序,未索引且还包含唯一元素的集合。因此,我们将比较从列表创建的集合

  • 我有一个。我想检查列表中的所有元素是否大于或小于某个条件。我可以通过对每个元素进行迭代来实现。但我想知道,在Collection类中是否有任何方法可以得到答案,就像我们可以分别用和找到最大值或最小值一样。