以下是生成任意两个3位数字的产品的代码
integers_list = [(i * x) for i in range(100,1000) for x in range(100,1000)]
string_list = (map(str, integers_list))
integers_list.sort()
string_list.sort()
print integers_list[-10:-1]
print string_list[-10:-1]
给出:
[995004, 995004, 995006, 995006, 996003, 996003, 996004, 997002, 997002]
['99994', '99994', '99996', '99996', '99997', '99997', '99999', '99999', '99999']
如果我在列表理解中使用str(i * x)
,也会发生这种情况。
根据表达式,字符串列表中的数字甚至不可能。
为什么会发生这种情况,我该怎么做才能解决这个问题?
答案 0 :(得分:8)
字符串的排序顺序与整数不同。 9800大于990,但'9800'小于'990'。
答案 1 :(得分:3)
Mark Ransom指出,原因是因为排序字符串是按字典顺序完成的。要使排序过程按整数值排序,请执行以下操作:
string_list.sort(key=int)
integers_list.sort(key=int)