Python .sort() 不按预期工作
在一个安静的周六晚上,我在解决一些难题(哇哦……并不太好),但我在使用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))
,这样就能正常工作了(或者用其他的排序方法)。