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