2013-04-24 110 views
0

我有一個對象數組(它們都是相同的對象類型)並且它們有多個屬性,有沒有辦法返回一個更小的數組對象,其中所有的屬性匹配一個測試用例,字符串,這個屬性類型是什麼。檢查對象數組中的多個屬性匹配

+0

您的意思是名單也許?默認的'[]'類型是一個列表,但'numpy'庫有數組。 – 2013-04-24 07:50:29

+0

在我的例子中,列表和數組一樣好,你在下面回答解決了我眼前的問題。 (我必須等待10分鐘才能明顯接受) – 2013-04-24 07:56:02

回答

3

使用all()的列表理解;以下假定一個list_of_attributes已預先定義枚舉你想要的屬性測試:

sublist = [ob for ob in larger_list if all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes)] 

另外,如果您的輸入列表是大的,你只需要通過一個訪問匹配的元素之一,使用一臺發電機表達:

filtered = (ob for ob in larger_list if all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes)) 
for match in filtered: 
    # do something with match 

或可以使用filter() function

filtered = filter(lambda ob: all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes) 
for match in filtered: 
    # do something with match 

代替使用預先定義的list_of_attributes,你可以用vars() function測試所有的屬性;這個假定所有實例屬性需要進行測試:不是陣列

all(value == 'some test string' for key, value in vars(ob)) 
+0

這回答我的問題,我發現它有點慢,因爲我在一邊有一個小小的清單,另一邊是大清單(小清單本身相當大) – 2013-04-24 08:21:18

相關問題