Python3.xカスタム比較関数
2263 ワード
Python 3.xの世界にはcmp関数がありません.ではsorted,min,maxなど比較関数をパラメータとする必要がある関数はどのように使うのでしょうか.
min関数の定義を例にとると、2つのリロード形式があります.
単一パラメータ(反復):
複数パラメータ(複数比較対象):
本稿ではkey=funcパラメータの使用について主に論じる.例を挙げて説明しましょう.
1.カスタムオブジェクトの比較
2つのメンバー変数aとbを持つクラスtestを定義しました.
キーワード関数)、だからlamdaのパラメータは1つだけあって、勝手にどんな名前(私が使っているのはt)を取って、比較する対象(すなわちa,b,c)を表します;コロンの後ろは式で、ここで直接tのメンバー変数aを返します.
したがって、min関数(max、sortedなどの関数も同様)は、比較対象の各オブジェクトのa値に基づいてそれぞれ比較し、a値が最も小さいオブジェクト(の参照)を返してminTestに付与する.
出力してa,minTest.b結果を検証することができます.
2.辞書値valueの比較
辞書があります.
値valueに基づいてソートする場合は?では、比較関数というパラメータを入力します.
P.S.
ブロガーは今日、The Python Challengeを突破し、テキストに表示される文字の数を統計し、最小の文字を見つける必要があります.もちろんその関系は自分で比较関数を书く必要はなく、统计结果を出力して肉眼で见ることができます.ブロガーが検索エンジンmin関数のkey=funcパラメータを借りると、中国語のPythonの紹介文はすべて旧世界のPython 2である.xの天下、新しい世界で使うことができない文法でいっぱいで、Python 3にあげます.xの初心者は多くの誤解をもたらし、有害で無益である.だからこの文を出した.
ブロガーもPython初心者で、大牛が指摘してくれたら光栄です.
min関数の定義を例にとると、2つのリロード形式があります.
単一パラメータ(反復):
min(iterable[, key=func]) -> value
複数パラメータ(複数比較対象):
min(a, b, c, ...[, key=func]) -> value
本稿ではkey=funcパラメータの使用について主に論じる.例を挙げて説明しましょう.
1.カスタムオブジェクトの比較
2つのメンバー変数aとbを持つクラスtestを定義しました.
class test:
def __init__(self,a,b):
self.a = a
self.b = b
は次に、3つのオブジェクトx,y,zをインスタンス化する.x=test(10,'x')
y=test(2,'y')
z=test(8,'z')
変数aを基準に比較して、aの最小のオブジェクトを求めたいです.minTest=min(x,y,z,key=lambda t:t.a)
keyというパラメータは関数を入力する必要があるため、lambda匿名関数を使用するのは便利です.この例では比較関数(正確には比較)を実現するキーワード関数)、だからlamdaのパラメータは1つだけあって、勝手にどんな名前(私が使っているのはt)を取って、比較する対象(すなわちa,b,c)を表します;コロンの後ろは式で、ここで直接tのメンバー変数aを返します.
したがって、min関数(max、sortedなどの関数も同様)は、比較対象の各オブジェクトのa値に基づいてそれぞれ比較し、a値が最も小さいオブジェクト(の参照)を返してminTestに付与する.
出力してa,minTest.b結果を検証することができます.
2.辞書値valueの比較
辞書があります.
dic={'b':3,'a':5,'c':9,'d':2}
辞書のキーキーに従ってソートする場合は、次の限りです.sorted(dic)
はリストを返します.ソートされたキーですが、値はリストに入りません.['a', 'b', 'c', 'd']
は以下の方法で良いです.>>> sorted(dic.items())
[('a', 5), ('b', 3), ('c', 9), ('d', 2)]
値valueに基づいてソートする場合は?では、比較関数というパラメータを入力します.
sorted(dic.items(),key=lambda d:d[1])
lambda匿名関数を引き続き使用します.ここでdはdicを表す.items()の各反復要素、すなわちメタグループ('a',5);式d[1]は、メタグループの2番目の要素(例えば5)であり、辞書の値valueでもあり、比較基準とする必要があります.実行結果:[('d', 2), ('b', 3), ('a', 5), ('c', 9)]
P.S.
ブロガーは今日、The Python Challengeを突破し、テキストに表示される文字の数を統計し、最小の文字を見つける必要があります.もちろんその関系は自分で比较関数を书く必要はなく、统计结果を出力して肉眼で见ることができます.ブロガーが検索エンジンmin関数のkey=funcパラメータを借りると、中国語のPythonの紹介文はすべて旧世界のPython 2である.xの天下、新しい世界で使うことができない文法でいっぱいで、Python 3にあげます.xの初心者は多くの誤解をもたらし、有害で無益である.だからこの文を出した.
ブロガーもPython初心者で、大牛が指摘してくれたら光栄です.