我有一行代码如下:
event = [x for x in history if x.serial == serialized_event]
在我的应用程序的所有情况下,结果列表将只包含单个项目。但在我看来,无论如何都要遍历整个“历史”列表,寻找所有可能的匹配。
这是不必要的,特别是因为在大多数情况下,它会在前几个索引中找到我正在寻找的东西,它实际上是唯一的结果。
如何提高效率?
答案 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))