我有一个可能很长的 Python 对象列表。在特定时间,我对列表中具有特定属性的所有元素感兴趣,例如flag
,评估为 False。为此,我一直在使用列表理解,如下所示:
objList = list()
# ... populate list
[x for x in objList if not x.flag]
这似乎运作良好。形成子列表后,我可能需要执行一些不同的操作:
- 下标子列表以获取 index 处的元素
ind
。 - 计算子列表的长度(即具有 的元素的数量
flag == False
)。 - 在子列表中搜索特定对象的第一个实例(即使用列表的
.index()
方法)。
我已经使用简单的方法实现了这些,即形成子列表,然后使用它的方法来获取我想要的数据。我想知道是否有更有效的方法来解决这些问题。#1和#3至少看起来可以优化,因为在#1中我只需要子列表的第一个ind + 1
匹配元素,不一定是整个结果集,而在#3中我只需要搜索子列表直到我找到一个匹配的元素。
有没有一种好的 Pythonic 方式来做到这一点?我猜我可能能够以()
某种方式使用语法来获取生成器,而不是创建整个列表,但我还没有找到正确的方法。我显然可以手动编写循环,但我正在寻找与基于理解的方法一样优雅的东西。