考虑两个列表:
list1=[-4,-5,-3]
list2=['-4','-5','-3']
现在,如果我们使用
list1.sort()
list2.sort() # in python3
我们得到矛盾的结果:
[-5, -4, -3]
['-3', '-4', '-5']`
为什么会这样,我们怎么做正确!!
答案 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
是一个字符串数组。这就是为什么它们不一样的原因。