Python-str()函数完全改变了列表

时间:2013-12-20 20:18:43

标签: python string list

以下是生成任意两个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),也会发生这种情况。

根据表达式,字符串列表中的数字甚至不可能。

为什么会发生这种情况,我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:8)

字符串的排序顺序与整数不同。 9800大于990,但'9800'小于'990'。

答案 1 :(得分:3)

Mark Ransom指出,原因是因为排序字符串是按字典顺序完成的。要使排序过程按整数值排序,请执行以下操作:

string_list.sort(key=int)
integers_list.sort(key=int)