为什么sort()无法正常工作?

时间:2016-06-18 21:36:10

标签: python python-3.x

我应该编写一个初始化空列表的代码,然后读取命令并将它们应用到此列表中。到目前为止我写的所有内容都很有效,除了sort(),列表是['5','10','9','1']它变成['1','10','5' ,'9']排序后显然不对。 那是我的代码:

N = int(input()) ## number of commands
L = []
for i in range(N):
userInput = input().split()
cmd = userInput[0]
args = userInput[1:]
if cmd == "insert":
    L.insert(int(args[0]), args[1])
elif cmd == "print":
    print(L)
elif cmd == "remove":
    L.remove(args[0])   
elif cmd == "append":
    L.append(args[0])
elif cmd == "sort":
    L.sort() ## the only method that doesn't work properly.
elif cmd == "pop":
    L.pop()
elif cmd == "reverse":
    L.reverse()

5 个答案:

答案 0 :(得分:2)

您在输入列表(由表示数字的字符串组成)上执行字符串排序。因此,执行词典排序,这意味着101之后但在5之前(它在字典中出现相同的顺序单词)。要获得具有预期数据类型的所需订单,请尝试以下操作:

L.sort(key=int)

在上面的代码中,我们使用列表中每个元素的整数表示作为键,因此按照正确的顺序对列表进行排序。

另一个有效的可能性是始终使用整数列表(如果您没有打算将输入作为字符串列表)。如果这更有意义,请修改以下情况以确保处理正确的数据类型:

if cmd == "insert":
    L.insert(int(args[0]), int(args[1]))
elif cmd == "remove":
    L.remove(int(args[0]))
elif cmd == "append":
    L.append(int(args[0]))

答案 1 :(得分:0)

在这种情况下,您将sort应用于字符串列表,这意味着比较基于字符而不是数值。

您需要首先将输入映射为整数:

args = map(int, args)

答案 2 :(得分:0)

您的列表由字符串而非整数(或精确的数字)组成。

sort()方法正在执行词典排序(正如字符串所预期的那样)。尝试将您的输入转换为int

您可以修改该行:

args = userInput[1:]

为:

args = map(int, userInput[1:])

答案 3 :(得分:0)

你已经知道为什么你的排序没有按预期工作。

我只是希望为您提供更好的解决方案,而不是将所有内容转换为整数,然后排序,然后再转换为字符串。这是非常低效的。

要做到这一点,您将两个比较操作数转换为int并以此形式比较它们。你在排序过程中这样做,从而避免了3个循环。

def custom (x, y):
    x = int(x); y = int(y)
    return cmp(x, y)

lst = ['1', '5', '4', '3', '2', '10', '9']
lst.sort(custom)

答案 4 :(得分:0)

如果您希望列表项保持字符串,最佳解决方案可能是:

L.sort(key=int)

这会将列表中的所有字符串转换为整数以进行比较,但您不必在之后将其转换回来。