2012-02-21 127 views
52

我想檢查我的對象列表是否包含具有某個特定值的對象。檢查對象列表是否包含具有特定屬性值的對象

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

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

我想要一種檢查列表是否包含名稱爲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 

我不想去通過整個列表每次,我只需要知道,如果它匹配那裏有1個實例。將first(...)any(...)還是別的什麼呢?

+0

'first()'函數可以作爲內置的next()函數使用。 – 2012-02-21 02:07:16

回答

84

正如您可以從documentation中輕鬆看到的那樣,一旦找到匹配項,any()函數會將返回值True短路。

any(x.name == "t2" for x in l) 
相關問題