Python列表排序奇怪的行为

时间:2013-11-08 06:25:28

标签: list sorting python-3.x

伙计们,请帮助我理解我设法输出的这种奇怪的行为。

>>> a = [1, 4, 3, 2]
>>> a
[1, 4, 3, 2]
>>> b = a.sort()
>>> a
[1, 2, 3, 4]
>>> 

为什么“b = a.sort()”排序列表'a'?

1 个答案:

答案 0 :(得分:3)

a.sort()对IN-PLACE进行排序。这意味着a的内容被更改 此外,b将为None

我认为您要找的是b = sorted(a),它会创建a内容的排序副本并将其存储在b

>>> a = [1,4,3,2]
>>> b = sorted(a)
>>> a
[1, 4, 3, 2]
>>> b
[1, 2, 3, 4]
>>> b = a.sort()
>>> a
[1, 2, 3, 4]
>>> b
>>>

a.sort()会对a进行排序,并将a的已排序内容分配回a(这就是排序IN-PLACE的含义)。因此,没有返回值(这与None的返回值相同。因此调用a.sort(),对IN-PLACE进行排序,并获取此类排序的返回值(即None)并将返回值指定为b(因此b为无)。

如果您要执行b=a.count(2),则会调用a.count(2),它会返回一个整数(在本例中为1)。此返回值已分配给b,这是b包含值2的方式。

>>> a = [1,4,3,2]
>>> a.count(2)
1
>>> b = a.count(2)
>>> b
1
>>> 

同样,当您执行b=a.sort()时,会调用a.sort()(对a.sort()的调用会对a IN-PLACE中的项目进行排序),这会返回None }。此返回值已分配给b

现在,在上面的示例中,a.count(2)仍计算2a的出现次数,尽管调用a.count(2)的返回值不是分配给任何东西。这是a.sort()排序a的原因背后的确切逻辑,即使结果未分配给任何内容