检查对象列表是否包含具有特定属性值的对象

我想检查我的对象列表是否包含一个具有特定属性值的对象。

class Test:
def __init__(self, name):
self.name = name


# in main()
l = []
l.append(Test("t1"))
l.append(Test("t2"))
l.append(Test("t2"))

例如,我想要一种检查 list 是否包含名为 "t1"的对象的方法。怎样才能做到呢?我找到了 https://stackoverflow.com/a/598415/292291,

[x for x in myList if x.n == 30]               # list of all matches
any(x.n == 30 for x in myList)                 # if there is any matches
[i for i,x in enumerate(myList) if x.n == 30]  # indices of all matches


def first(iterable, default=None):
for item in iterable:
return item
return default


first(x for x in myList if x.n == 30)          # the first match, if any

我不想每次都看完整个列表,我只需要知道是否有一个匹配的实例。first(...)或者 any(...)或者其他什么能做到这一点吗?

108289 次浏览

正如你可以很容易地看到从 文件any()函数短路返回 True一旦匹配已经找到。

any(x.name == "t2" for x in l)