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

輸出:Python的逆=真正的倒車問題

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

當我使用reverse=True,它不應該是這樣的:['Fred Newton','Isaac Newton', 'Niels Bohr']

+1

爲什麼要這樣? –

+0

爲什麼?你正在排序last_name .. Newton = Newton,Fred對Isaac的順序是無關緊要的。 – Daniel

回答

5

Python的排序算法是stable。如果兩個值具有相同的key(value)結果,則它們的相對順序保持不變。逆向僅適用於key(value)結果不同

因爲key('Isaac Newton')key('Fred Newton')都產生'Newton',所以這兩個字符串保持原來的相對順序。 reverse=True標誌隻影響'Bohr''Newton'之前或之後排序。

如果您需要將它們的相對訂單逆轉,請將轉發,然後反轉結果列表。