我想优化我的 python 代码,我想我可以通过列表理解来改进以下 for 循环以提高性能:
for obj in self.objs:
if obj.is_runnable():
return obj
return None
我的想法是做这样的事情:
objs = [obj for obj in self.objs if obj.is_runnable()]
return objs[0]
但我认为这不会更好,因为它不会在找到第一个元素后停止迭代,而且现在它不处理 None
的情况,但这可以通过if-else
语句。
我的问题:有没有一种方法可以使用列表理解,它会在返回第一个元素后中断?
最佳答案
使用next
使用默认值:
return next((obj for obj in self.objs if obj.is_runnable()), None)
请注意,我将列表理解 [...]
更改为生成器表达式 (...)
,否则您仍然会在获取第一个元素。使用 (...)
,它只会根据需要测试尽可能多的元素。
或者使用filter
,其中ClassOfObj
是obj
类的占位符:
return next(filter(ClassOfObj.is_runnable, self.objs), None)
关于python - 使用列表理解返回第一个找到的元素或 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991138/