2013-04-24 75 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

相关问题