我应该编写一个初始化空列表的代码,然后读取命令并将它们应用到此列表中。到目前为止我写的所有内容都很有效,除了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()
答案 0 :(得分:2)
您在输入列表(由表示数字的字符串组成)上执行字符串排序。因此,执行词典排序,这意味着10
在1
之后但在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)
这会将列表中的所有字符串转换为整数以进行比较,但您不必在之后将其转换回来。