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