在两个数组中获取匹配元素的值

时间:2011-10-26 06:11:05

标签: python arrays

如果ab是对象列表,每个对象都有名称属性(例如a1 = A("1")b1 = B("1")等),我该如何检查是否等效?我现在正在这样做:

aList = [ a1, a2, a3, a4, a5 ]
bList = [ b1, b2 ]
aNameList = []
bNameList = []

for i in aList:
    aNameList.append( i.name )
for i in bList:
    bNameList.append( i.name )

match = set(aNameList) & set(bNameList)

>>> set(['1', '2'])

但似乎有点长且没必要。有什么更好的方法呢?

3 个答案:

答案 0 :(得分:4)

您可以使用列表推导来替换示例中的临时列表和for循环:

match = set( [ x.name for x in aList ] ) & set ( [ x.name for x in bList ] )

答案 1 :(得分:0)

operator.attrgetter函数旨在提取感兴趣的字段:

set(map(attrgetter('name'), aList)) & set(map(attrgetter('name'), bList))

答案 2 :(得分:0)

你可以用map替换列表理解(替换临时列表和for循环) 像:

name = lambda: n: n[name]
match = set(map(name,aList))&set(map(name,bList))