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

时间:2009-10-03 13:22:04

标签: python list sorting

在一个安静的星期六晚上解决一些谜题问题(哇哇......没有)并且正在与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]

哪个网:

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

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

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

8 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:12)

Sort正在完成它的工作。如果您打算在列表中存储整数,请参考Lukáš的建议。您还可以告诉sort如何排序,例如通过输入:

list.sort(key=int)

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

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

答案 2 :(得分:2)

您的列表包含字符串,因此它按字母顺序排序 - 尝试将列表转换为整数然后进行排序。

答案 3 :(得分:1)

你在排序字符串,而不是数字。字符串从左到右比较。

答案 4 :(得分:1)

无需转换为int。 mult已经是一个int并且你已经检查过它是一个回文它看起来和反转一样,所以只是:

list.append(mult)

答案 5 :(得分:0)

您将数字存储为字符串,因此python会相应地对它们进行排序。所以:'101x'出​​现在'102x'之前(就像'abcd'将在'az'之前出现一样)。

答案 6 :(得分:0)

不,它正在正确排序,只是它正在排序词典,你想要数字排序...所以删除“str()”

答案 7 :(得分:0)

比较器运算符将输入视为字符串而不是整数。在字符串比较2中,因为第3个字母在词法上大于1。 reversed = str(mult)[::-1]