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))
输出:
s: ['Niels Bohr', 'Isaac Newton', 'Fred Newton']
s: ['Isaac Newton', 'Fred Newton', 'Niels Bohr']
当我使用reverse=True
时,不应该是这样的:['Fred Newton','Isaac Newton', 'Niels Bohr']
?
答案 0 :(得分:5)
Python的排序算法稳定。如果两个值具有相同的key(value)
结果,则它们的相对顺序保持不变。撤消仅适用于不同的key(value)
结果。
由于key('Isaac Newton')
和key('Fred Newton')
都生成'Newton'
,因此这两个字符串保留其原始相对顺序。 reverse=True
标记仅影响'Bohr'
之前或之后'Newton'
的排序。
如果您需要颠倒相对顺序,请排序前进,然后反转结果列表。