Python .sort()没有按预期工作

Dom*_*mra 9 python sorting list

在一个安静的星期六晚上解决一些谜题问题(哇哇......不)并且正在与sort()挣扎.结果并不完全符合我的预期.该程序遍历100 - 999的每个组合,并检查产品是否是一个palindome.如果是,请附加到列表中.我需要排序的列表: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]
Run Code Online (Sandbox Code Playgroud)

哪个网:

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801',
'108801', '110011']
Run Code Online (Sandbox Code Playgroud)

显然索引0大于1.任何想法是怎么回事?我有一种感觉它与尾随/前导零有关,但我看了一眼,我看不出问题.

如果您知道谜题的来源,可以获得奖励积分:P

Luk*_*ský 23

你正在排序字符串,而不是数字.'101101' < '10201'因为'1' < '2'.更改list.append(reversed)list.append(int(reversed)),它会工作(或使用不同的排序功能).

  • 哦,伙计......就在我以为我是从菜鸟那里毕业的时候,到了新手;)谢谢! (8认同)

u0b*_*6ae 13

排序正在发挥作用.如果您打算在列表中存储整数,请参考Lukáš的建议.你也可以告诉sort如何排序,例如通过ints:

list.sort(key=int)
Run Code Online (Sandbox Code Playgroud)

key参数采用一个函数来计算一个项目,以便在所有比较中获取列表对象的位置.整数将按照您的预期进行数字比较.

(顺便说一下,list是一个非常糟糕的变量名,因为你覆盖了内置的list()类型!)