与python中的list.sort()混淆

与python中的list.sort()混淆,python,python-3.x,Python,Python 3.x,考虑两个列表: list1=[-4,-5,-3] list2=['-4','-5','-3'] 现在如果我们使用 list1.sort() list2.sort() # in python3 我们得到了相互矛盾的结果: [-5, -4, -3] ['-3', '-4', '-5']` 为什么会这样?我们怎样才能做得对 这是两个不同内容的数组。List1是一个带有数字的数组,List2是一个字符串数组。这就是为什么它们排序不一样。这是两个不同内容的数组。List1是一个带有数字的数组,Li

考虑两个列表:

list1=[-4,-5,-3]
list2=['-4','-5','-3']
现在如果我们使用

list1.sort()
list2.sort() # in python3 
我们得到了相互矛盾的结果:

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

为什么会这样?我们怎样才能做得对

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

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

列表1排序非常简单,因为它只是对数字进行数字排序

在列表2中,值存储为字符串。因此,它通过ASCII值对它们进行比较和排序。数字3的ASCII值为51,数字4的ASCII值为52,数字5的ASCII值为53。所以它工作完全正确,如果你想整理单词,这就是你想要的方式

但是,如果您只是想按正确的顺序对数字进行排序,请确保它们是与列表1类似的整数。或者,您可以在sort方法中设置键,将其转换为int,以便按如下数字方式进行排序:

list2.sort(key=int)
list1排序非常简单,因为它只是对数字进行数字排序

在列表2中,值存储为字符串。因此,它通过ASCII值对它们进行比较和排序。数字3的ASCII值为51,数字4的ASCII值为52,数字5的ASCII值为53。所以它工作完全正确,如果你想整理单词,这就是你想要的方式

但是,如果您只是想按正确的顺序对数字进行排序,请确保它们是与列表1类似的整数。或者,您可以在sort方法中设置键,将其转换为int,以便按如下数字方式进行排序:

list2.sort(key=int)
为什么会这样? 您可以检查'-3'<'-4'。字符串比较检查第一个符号'-'='-',检查第二个符号'3'<'4',所以'-3'<'-4'

我们怎样才能把它做好? 这取决于你所说的正确。如果您想对整数进行排序,Python会做得很好。如果您想对字符串进行排序,Python也会做得很好

为什么会这样? 您可以检查'-3'<'-4'。字符串比较检查第一个符号'-'='-',检查第二个符号'3'<'4',所以'-3'<'-4'

我们怎样才能把它做好? 这取决于你所说的正确。如果您想对整数进行排序,Python会做得很好。如果您想对字符串进行排序,Python也会做得很好。

列表[-4,-5,-3]中的元素是数字,而列表['-4'、'-5'、'-3']中的元素是字符串,因为列表中的数字介于“单个”之间

所以,产生矛盾结果的原因是,当你对数字进行排序时,你得到的是[-5,-4,-3],它是按数字值排序的

当您使用字符串对另一个列表进行排序时,它会按字母顺序对其进行排序,其中3、4和5是正确的,其中“-”是第一个字符,3、4和5是后面的字符。根据其ASCII值对其进行排序

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

列表[-4,-5,-3]中的元素是数字,而列表['-4','-5','-3']中的元素是字符串,因为列表中的数字介于“单个”之间

所以,产生矛盾结果的原因是,当你对数字进行排序时,你得到的是[-5,-4,-3],它是按数字值排序的

当您使用字符串对另一个列表进行排序时,它会按字母顺序对其进行排序,其中3、4和5是正确的,其中“-”是第一个字符,3、4和5是后面的字符。根据其ASCII值对其进行排序


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

这是因为在一种情况下,您对整数进行排序,而在另一种情况下,您对字符串进行排序。第二个列表是按字典顺序排序的,简而言之,这意味着当元素包含相同的后缀时,它们是按字母顺序排序的。这就是为什么ab跟在aa后面,-4跟在-3后面。这是因为在一种情况下,你对整数排序,而在另一种情况下,你对字符串排序。第二个列表是按字典顺序排序的,简而言之,这意味着当元素包含相同的后缀时,它们是按字母顺序排序的。这就是为什么ab在aa之后,-4在-3之后。或者,如果您想对表示整数的字符串进行排序,就像它们是整数时被排序一样,您可以将键参数添加到.sort:.sortkey=int。这将在排序时隐式地将它们转换为整数,而不修改列表本身。。。。而“-”都被忽略,因为它们在每个字符串中都是相同的。您可以使用key:list2.sortkey=intI强制python将字符串作为整数进行比较我已经编辑了我的答案,这是一种相当不错的方法。或者,如果您想对表示整数的字符串进行排序,就像对整数进行排序一样,您可以将key参数添加到.sort:.sortkey=int。这将在排序时隐式地将它们转换为整数,而无需修改
正在删除列表本身。。。。而“-”都被忽略,因为它们在每个字符串中都是相同的。您可以使用key:list2.sortkey=int强制python将字符串作为整数进行比较。我已经编辑了我的答案,这是一种相当不错的方法。