2011-10-26 13 views
1

abのオブジェクトのリスト(それぞれa1 = A("1")b1 = B("1")など)の名前のリストであれば、同等性をどのように確認できますか?私は現在、これをやっています:2つの配列で一致する要素の値を取得

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']) 

しかし、それは長いと不要です。これを行う良い方法は何ですか?

あなたはあなたの例のそれらの一時リストとforループを交換する代わりに、リストの内包表記を使用することができます

答えて

4

operator.attrgetter機能は、関心のある分野を抽出するために設計された
match = set([ x.name for x in aList ]) & set ([ x.name for x in bList ]) 
+0

コメントのおかげで、あなたの権利...私はベッドに行く(将来の読者のために、私のコメントを削除しました) – fceruti

+0

'set'はジェネレータを受け入れますので、角括弧は不要です。 –

+0

@ KarlKnechtel角括弧は一般的に書式的に優れているか、まったく必要ないか? – idlackage

0

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

することができますがリストの理解を置き換えます(テンポラリリストとforループを置き換える)。

name = lambda: n: n[name] 
match = set(map(name,aList))&set(map(name,bList)) 
関連する問題