有人可以解释这种排序结果是如何产生的吗?

时间:2016-09-19 20:22:19

标签: python sorting key

让我们说你有给定的功能:

def last(word):
    return word[-1]

print (sorted(['apple','orange','banana','grape','watermelon'], key=last))

这将返回一个列表,该列表按每个字符串中的最后一个索引排序:

['banana', 'apple', 'orange', 'grape', 'watermelon']

所以现在有人可以解释当我们要求用户输入为我们传递给函数last的每个字符串指定索引时会发生什么。例如,如果我们将代码更改为:

def last(word):
    index = int(input('Enter index:'))
    return word[index]

print (sorted(['apple','orange','banana','grape','watermelon'], key=last))

然后,如果用户输入以下序列(1,1,2,2,-1),则会产生列表:

['grape', 'banana', 'watermelon', 'apple', 'orange']

似乎没有按索引1,2或-1排序。

有谁可以解释幕后发生的事情以及Python如何处理这种情况?我理解这是一个非常奇怪的问题,但我想了解Python如何解释这些指令。

1 个答案:

答案 0 :(得分:2)

排序完全正确。您要求按索引(1, 1, 2, 2, -1)排序的单词。让我们来看看它们是什么字符:

>>> for index, word in zip((1, 1, 2, 2, -1), ['apple', 'orange', 'banana', 'grape', 'watermelon']):
...     print(word[index], word)
...
p apple
r orange
n banana
a grape
n watermelon

因此,这些字母的正确排序顺序为('a', 'grape'), ('n', 'banana'), ('n', 'watermelon'), ('p', 'apple')('r', 'orange')(其中('n', 'banana')('n', 'watermelon')按输入顺序保存,因为它们都在{ {1}})。这正是你得到的结果。