python - 在列表中查找属性等于某个值的对象(满足任何条件)

我有一个对象列表。我想在这个列表中找到一个(第一个或其他)对象,它的属性(或方法结果 - 不管)等于 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/

相关文章:

python - 使用代码存储库时如何引用资源的相对路径

linux - 如何使 rpm 自动安装依赖项

windows - 互斥锁和临界区有什么区别?

python - sum() 之类的函数是什么,但用于乘法?产品()?

linux - 使用 Unix 排序对多个键进行排序

c - GCC 的 __builtin_expect 在 if else 语句中的优势是什么?

linux - 如何更改 bash 历史完成以完成已经上线的内容?

python - 不可变与可变类型

python - 在多个上下文管理器上创建一个 "with" block ?

python - 如何保持 Python 脚本输出窗口打开?