【问题标题】:Can someone explain how this sort result is produced?有人可以解释这种排序结果是如何产生的吗?
【发布时间】:2016-09-19 20:22:19
【问题描述】:

假设你有给定的功能:

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 是如何解释这些指令的。

【问题讨论】:

  • 您应该在您的last 函数中添加一个print(word),以查看您为哪个词设置索引。这可能会消除一些混乱。
  • @Blued00d:那么您希望排序的结果是什么?您认为索引 (1,1,2,2,-1) 会产生哪些字符供 sorted() 排序?
  • @StefanPochmann 我相信 OP 指的是sorted...
  • @juanpa.arrivillaga 啊,对,sorted 是高阶。奇怪地调用一个流行的内置“这个高阶函数”。我认为他们指的是last,但是嗯,随便。
  • @StefanPochmann 我也拍了两遍。

标签: python sorting key


【解决方案1】:

排序是完全正确。您要求按索引(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') 保持输入顺序,因为它们都按'n' 排序)。这正是你得到的结果。

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2011-09-12
    • 2023-03-24
    • 2011-07-31
    相关资源
    最近更新 更多