Python .sort() 不按预期工作

12 投票
8 回答
49984 浏览
提问于 2025-04-15 14:46

在一个安静的周六晚上,我在解决一些难题(哇哦……并不太好),但我在使用sort()时遇到了麻烦。结果和我预期的不太一样。这个程序会遍历从100到999的每一种组合,检查它们的乘积是否是回文数。如果是,就把它添加到列表里。我需要把这个列表排序 :D 这是我的程序:

list = [] #list of numbers

for x in xrange(100,1000): #loops for first value of combination
  for y in xrange(x,1000): #and 2nd value
    mult = x*y
    reversed = str(mult)[::-1] #reverses the number
    if (reversed == str(mult)):
      list.append(reversed)

list.sort()
print list[:10]

运行结果是:

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801',
'108801', '110011']

明显地,索引0的值比索引1的值大。有人知道这是怎么回事吗?我觉得可能和前导零或后缀零有关,但我快速看了一下,没发现问题。

如果你知道这个难题的来源,额外加分哦 :P

8 个回答

2

你的列表里是字符串,所以它在按字母顺序排序。试着把列表里的内容转换成整数,然后再进行排序。

13

排序功能正在正常工作。如果你打算在列表中存储整数,可以听听Lukáš的建议。你还可以告诉排序怎么排序,比如通过将数据转换为整数:

list.sort(key=int)

这个key参数可以接收一个函数,这个函数会计算出一个值,用来在所有比较中代表列表中的某个项目。整数会按照你预期的方式进行数字比较。

顺便说一下,list这个变量名其实很糟糕,因为它会覆盖掉Python内置的list()类型!

25

你在排序的是字符串,而不是数字。比如说,'101101' < '10201' 是因为 '1' < '2'。把 list.append(reversed) 改成 list.append(int(reversed)),这样就能正常工作了(或者用其他的排序方法)。

撰写回答