python - 使用列表理解返回第一个找到的元素或 None

标签 python list-comprehension

我想优化我的 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,其中ClassOfObjobj类的占位符:

return next(filter(ClassOfObj.is_runnable, self.objs), None)

关于python - 使用列表理解返回第一个找到的元素或 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991138/

相关文章:

python - 如何设置Hydra的参数HYDRA_FULL_ERROR?

Python 使用列表理解读取行(csv 和 json 文件)

Python 元组到字典,带有额外的键列表

Haskell "Couldn' t 将预期类型 ‘a’ 与实际类型 ‘[a0]’ 匹配“

python - 如何在列表理解中使用嵌套名称作为前一个可迭代对象的 __getitem__ 索引?

python - 性能比较 : insert vs build Python set operations

python - 高效计算多个张量内积

python - 从数据透视表绘制 Pandas DataFrame

python - Keras 模型到tensorflow.keras

python - 如何在列表理解中使用 print() 和其他操作?