如果您的对象没有任何其他索引或排序信息,则必须迭代直到找到这样的对象:
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倍)。

如果您的对象没有任何其他索引或排序信息,则必须迭代直到找到这样的对象:
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倍)。