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

Python-str()函数完全改变列表,python,string,list,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,

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

给定表达式,字符串列表中的数字甚至不可能出现


为什么会发生这种情况,我可以做些什么来修复它?

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

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

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

如果给定表达式,字符串列表中的哪些数字是不可能的?我只检查了其中的一些,但例如99999可以分解为3^2×41×271=369×271,这似乎与列表理解相匹配;它不是一个完美的正方形,任何不是完美正方形的数字都应该出现偶数次。您的输出数字从
10000
(5位)一直到
998001
(6位),因此生成的数字完全可信。@user2357112:'99999'出现4次,但你切下了第四次。从切片中删除
-1
。啊,错过了
-1
结束索引。看来不错。(还有,我不是OP。也许我应该改变我的用户名。当我画了一个非常接近前几个素数序列的数字时,改变用户名似乎太可惜了…)字典排序赢了!我不知道为什么我的复制粘贴一开始没有按预期工作。我可能忘了分类。