key= , 在 Python 2 中排序

key= , sorting in Python 2

我正在查看 Python https://wiki.python.org/moin/HowTo/Sorting 中的排序指南,我对 key= 在某些示例代码中扮演的角色感到困惑。我很明显看到使用 key= 时它是如何变化的,但我很困惑为什么,我不明白为什么当 key=str.lower 和 key=str.upper.[=13 时结果相同=]

如有任何帮助,我将不胜感激。

print sorted("This is a test string from Andrew".split()) 
#Output: ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
print sorted("This is a test string from Andrew".split(), key=str.lower) 
#Output: ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
print sorted("This is a test string from Andrew".split(), key=str.upper) 
#Output: ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

您可以看到在第一个示例中大写字母排在小写字母之前。在接下来的两个中,您会看到大小写没有进入其中,因为每个字符都被赋予了相同的大小写(用于其排序键)。因此,任何一个最终都会产生 "case-insensitive" 排序顺序。

假设您的公司有两个部门:研发部。现在我们有一个公司活动,其中一个游戏要求我们按资历对人进行排序。现在,研究部门排在第一位,几年后在敌意收购中收购了开发部门,由于奖金由资历决定,因此研究部门的每个人的资历价值都会额外增加 100 年。

两年后,开发团队并入了研究团队,因为人们要求更公平的奖金。在下一次公司活动中,每个人都在研究部,所以每个人都有额外的 100 年资历,所以顺序取决于人们在公司的实际时间。

如果每个人都被纳入开发团队,结果会怎样?好吧,每个人的奖金都会少得多,但他们仍然会按照相同的顺序排队参加公司活动。

正确,key指定的函数只影响排序时的元素

所以传递 key=str.lower 排序 ['andrew', 'this', 'a', 'from', 'is', 'string', 'test'], 在传递 key=str.upper 时转换排序 ['ANDREW', 'THIS', 'A', 'FROM', 'IS' , 'STRING', 'TEST'].

然后它会打印带有原始大小写的列表元素。