找到/返回符合特定标准的第一个列表项的最优雅、最有效的方法是什么?

例如,如果我有一个对象列表,我想得到属性为obj.val==5的对象中的第一个对象.我当然可以使用列表理解,但这会导致O(n),如果n很大,这是浪费.一旦满足标准,我也可以使用break循环,但我认为可能会有一个更符合python/优雅的解决方案.

推荐答案

如果没有对象的任何其他索引或排序信息,则必须迭代,直到找到此类对象:

next(obj for obj in objs if obj.val == 5)

然而,这比完整的列表理解要快.将这两项进行比较:

[i for i in xrange(100000) if i == 1000][0]

next(i for i in xrange(100000) if i == 1000)

第一个需要5.75ms,第二个需要58.3µs(因为环路缩短了100倍,所以速度快了100倍).

Python相关问答推荐

Pandas - groupby字符串字段并按时间范围 Select

PyQt5,如何使每个对象的 colored颜色 不同?'

有没有一种方法可以从python的pussompy比较结果中提取文本?

将9个3x3矩阵按特定顺序排列成9x9矩阵

所有列的滚动标准差,忽略NaN

Odoo 16使用NTFS使字段只读

给定高度约束的旋转角解析求解

多处理队列在与Forking http.server一起使用时随机跳过项目

在单个对象中解析多个Python数据帧

使用特定值作为引用替换数据框行上的值

旋转多边形而不改变内部空间关系

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

如何使用OpenGL使球体遵循Python中的八样路径?

Polars map_使用多处理对UDF进行批处理

使用字典或列表的值组合

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'

如何在表单中添加管理员风格的输入(PDF)

当lambda函数作为参数传递时,pyo3执行

Pandas 数据框自定义排序功能

运行从Airflow包导入的python文件,需要airflow实例?