2016-11-06 1 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)) 

Ausgang:Python-Reverse = True Umkehrung Ausgabe

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

Wenn ich reverse=True verwenden, sollte es nicht so sein: ['Fred Newton','Isaac Newton', 'Niels Bohr']?

+1

Warum sollte es sein? –

+0

Warum? Sie sortieren nach last_name .. Newton = Newton, die Reihenfolge von Fred vs Isaac ist irrelevant. – Daniel

Antwort

5

Pythons Sortieralgorithmus ist stabil. Wenn zwei Werte die gleichen key(value) Ergebnisse haben, wird ihre relative Reihenfolge beibehalten. Reversieren gilt nur für key(value) Ergebnisse, die abweichen.

Da und key('Fred Newton') beide 'Newton' produzieren, bleiben diese beiden Strings in der ursprünglichen relativen Reihenfolge. Das Flag reverse=True beeinflusst nur, wenn 'Bohr' vor oder nach 'Newton' sortiert ist.

Wenn die relative Reihenfolge umgekehrt werden muss, sortieren Sie vorwärts, und kehren Sie dann die resultierende Liste um.