RoQ*_*riX 2 python list-comprehension
我想优化我的python代码,我可以通过列表理解来改善以下for循环以提高性能:
for obj in self.objs:
if obj.is_runnable():
return obj
return None
Run Code Online (Sandbox Code Playgroud)
我的想法是做这样的事情:
objs = [obj for obj in self.objs if obj.is_runnable()]
return objs[0]
Run Code Online (Sandbox Code Playgroud)
但是我认为这不会更好,因为它不会在第一个找到的元素之后停止迭代,现在它无法处理这种None情况,但这可以通过if-else声明来避免。
我的问题:有没有办法在列表返回第一个元素后使用列表理解功能而中断?
使用next默认值:
return next((obj for obj in self.objs if obj.is_runnable()), None)
Run Code Online (Sandbox Code Playgroud)
请注意,我将列表理解更改[...]为一个generator表达式(...),否则您仍将在获取第一个元素之前创建整个列表。使用(...),它将仅测试所需的多个元素。
或使用filter,哪里ClassOfObj是以下类别的占位符obj:
return next(filter(ClassOfObj.is_runnable, self.objs), None)
Run Code Online (Sandbox Code Playgroud)