与Python中的list.sort()混淆

时间:2019-03-06 09:59:37

标签: python python-3.x

考虑两个列表:

list1=[-4,-5,-3]
list2=['-4','-5','-3']

现在,如果我们使用

list1.sort()
list2.sort() # in python3 

我们得到矛盾的结果:

[-5, -4, -3]
['-3', '-4', '-5']`

为什么会这样,我们怎么做正确!!

4 个答案:

答案 0 :(得分:7)

list1排序很容易解释,因为它只是对数字进行数字排序。

list2中,值存储为字符串。因此,它正在按ASCII值对它们进行比较和排序。数字3的ASCII值为51,数字4的值为52,数字5的值为53。因此,它完全可以正常工作,如果要对单词进行排序,这就是您想要的方式。

但是,如果您只是想按正确的顺序对数字进行排序,请确保它们是int,例如list1。或者,您可以在sort方法中设置键,将其强制转换为int,以便按如下所示的数字方式进行排序:

list2.sort(key=int)

答案 1 :(得分:1)

  • 为什么会这样?

您可以检查'-3' < '-4'。字符串比较检查第一个符号'-' == '-',检查第二个符号'3' < '4',因此'-3' < '-4'

  • 我们该怎么做?

这取决于您所说的正确。如果要对整数排序,Python会正确处理。如果您想对字符串进行排序,Python也可以对它进行排序。

答案 2 :(得分:1)

列表[-4,-5,-3]中的元素是数字,而列表['-4','-5','-3']中的元素是字符串(因为列表中的数字在'single_qoutes'之间)。

因此,获得矛盾结果的原因是,当您对数字进行排序时,您会返回[-5, -4, -3],该列表按数字值进行排序。

当您使用字符串对另一个列表进行排序时,会按字母顺序对它们进行排序,其中3、4和5是正确的方式('-'是第一个字符,而3、4和5是紧随其后的字符。)根据其ASCII值对其进行排序。

因此,如果要对整数进行排序,请不要在引号之间包括它们。

答案 3 :(得分:0)

这是两个内容不同的数组。 List1是一个数字数组,List2是一个字符串数组。这就是为什么它们不一样的原因。