2016-11-06 10 views
0
def last_name(str): 
    return str.split()[1] 

names = ["Isaac Newton", "Fred Newton", "Niels Bohr"] 
print("s:", sorted(names, key=last_name)) 
print("s:", sorted(names, key=last_name, reverse=True)) 

出力:['Fred Newton','Isaac Newton', 'Niels Bohr']Pythonの逆= Trueの逆転問題

s: ['Niels Bohr', 'Isaac Newton', 'Fred Newton'] 
s: ['Isaac Newton', 'Fred Newton', 'Niels Bohr'] 

私はreverse=True使用し、それはこのようなことではないでしょうか?

+1

なぜでしょうか? –

+0

なぜですか?あなたはlast_nameをソートしています。ニュートン=ニュートン、フレッド対アイザックの順序は無関係です。 – Daniel

答えて

5

Pythonのソートアルゴリズムは、という安定したです。 2つの値の結果が同じである場合、その相対順序は同じに保たれます。反転はkey(value)の結果にのみ適用され、は異なるの結果になります。

key('Isaac Newton')key('Fred Newton')は両方とも'Newton'を生成するため、これらの2つの文字列は元の相対的な順序で残ります。 reverse=Trueフラグは、の前後にソートされている場合にのみ影響します('Bohr')。

相対順序を逆にする必要がある場合は、の順に並べ替え、結果のリストを逆にします。