通过Python列表中的对象属性获得第一个匹配的最快方法是什么?

时间:2016-07-18 17:31:03

标签: python

我有一行代码如下:

event = [x for x in history if x.serial == serialized_event]

在我的应用程序的所有情况下,结果列表将只包含单个项目。但在我看来,无论如何都要遍历整个“历史”列表,寻找所有可能的匹配。

这是不必要的,特别是因为在大多数情况下,它会在前几个索引中找到我正在寻找的东西,它实际上是唯一的结果。

如何提高效率?

2 个答案:

答案 0 :(得分:2)

如果不需要单行,只需使用带有中断的常规for循环:

event = []
for x in history:
    if x.serial == serialized_event:
        event.append(x)
        break

答案 1 :(得分:0)

如果您想保留单行,请使用itertools.dropwhile过滤不需要的结果,并仅获取第一个匹配的项目:

from itertools import dropwhile

event = next(dropwhile(lambda x: x.serial==serialized_event, history))