我有一个对象列表。我想在这个列表中找到一个(第一个或其他)对象,它的属性(或方法结果 - 不管)等于 value
。
找到它的最佳方法是什么?
这是一个测试用例:
class Test:
def __init__(self, value):
self.value = value
import random
value = 5
test_list = [Test(random.randint(0,100)) for x in range(1000)]
# that I would do in Pascal, I don't believe it's anywhere near 'Pythonic'
for x in test_list:
if x.value == value:
print "i found it!"
break
我认为使用生成器和 reduce()
不会有任何区别,因为它仍然会遍历列表。
ps.: value
的方程式只是一个例子。当然,我们希望得到一个满足任何条件的元素。
最佳答案
next((x for x in test_list if x.value == value), None)
这会从列表中获取与条件匹配的第一个项目,如果没有项目匹配,则返回 None
。这是我首选的单表达式形式。
然而,
for x in test_list:
if x.value == value:
print("i found it!")
break
简单的循环中断版本,完全是 Python 风格的——它简洁、清晰、高效。使其与单线的行为相匹配:
for x in test_list:
if x.value == value:
print("i found it!")
break
else:
x = None
如果您不 break
退出循环,这会将 None
分配给 x
。
https://stackoverflow.com/questions/7125467/