2017-08-19 5 views
-1

としてリストで、オブジェクトのリストに私がminBたい次のコード私はそのリスト上の最初の項目が最も低い基準に、同じB2にキー

from operator import attrgetter 

class A: 
    def __init__(self, aList): 
     self.aList = aList 

b1 = A([1,2,3]) 
b2 = A([0,7,5]) 

bList = [b1, b2] 

# minB = min(bList, key=attrgetter('aList[0]')) 

をattrgetterをして​​いる使用します。それ、どうやったら出来るの?コメントしたものは私が試したものですが、リスト属性のために動作しないようです。

答えて

5

シンプルです。ただ、attrgetterにお電話から[0]を削除:

from operator import attrgetter 

class A: 
    def __init__(self, aList): 
     self.aList = aList 

b1 = A([1,2,3]) 
b2 = A([0,7,5]) 

bList = [b1, b2] 

minB = min(bList, key=attrgetter('aList')) 
print(minB is b2) # True 

あなたは、各Aオブジェクトのリストの最初の要素であるとkeyを設定したい場合は、keyのための正常な機能を使用する必要があります:

minB = min(bList, key=lambda a_obj: a_obj.alist[0]) 
+0

ありがとう、それは動作するようですが、この動作はどこで定義されていますか? 0以外のインデックスを比較したいのですが? –

+1

@OdedSayar角括弧で異なる数字を入力するだけです。たとえば、2番目の要素を使用して比較したい場合は、 'alist [1]'を使用します。インデックス作成の詳細については、[こちら](https://docs.python.org/3.6/tutorial/introduction.html#lists)をご覧ください。 –

+0

@OdedSayar 2つの順序付けられたコレクション(文字列、リスト、またはタプル)を比較すると、Pythonは項目を順番に比較し、どちらが大きいか、つまり不一致を検出したときにすぐに停止します。最初の項目が一致しない場合は比較を中止できますが、等しい場合は2番目の項目などを比較して不一致が見つかるか、項目のうち1つが不足するまで検索します。 https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-typesをご覧ください。 –

関連する問題