python中的sort()并不能完全按预期工作

时间:2018-03-07 04:20:01

标签: python-3.x list sorting

如果l是一个列表,比如[9,3,4,1,6],我知道l.sort()将对列表进行排序。我也知道m = sorted(l)会创建一个新的列表m,作为l。

的排序版本

我不明白为什么m = l.sort(),不创建m作为l的排序版本,因为这似乎是对m的排序列表的赋值。从以下

可以看出这个问题
In [37]: l = [9,3,4,1,6]

In [38]: m=l.sort()

In [39]: m

In [40]: type(m)
Out[40]: NoneType

当然,如果我执行以下操作,则m成为l

的排序版本
In [41]: l = [9,3,4,1,6]

In [42]: l.sort()

In [43]: m=l

In [44]: m
Out[44]: [1, 3, 4, 6, 9]

有人可以解释为什么m = l.sort()不能作为作业吗?

3 个答案:

答案 0 :(得分:2)

list.sort改变你的列表以对其进行排序,它不会返回一个新列表。

l = [9, 3, 4, 1, 6]
l.sort()
l # [1, 3, 4, 6, 9]

如果要创建新的排序列表,请使用sorted

l = [9, 3, 4, 1, 6]
m = sorted(l)
l # [9, 3, 4, 1, 6]
m # [1, 3, 4, 6, 9]

答案 1 :(得分:1)

l.sort()没有返回值(参见here),所以当你这样做时

m = l.sort() 

你将m分配给任何东西

答案 2 :(得分:0)

sort()直接在列表上工作,并且具有None返回类型。 因此,如果要将其分配给某个变量并保留原始列表,可以通过以下方式执行此操作:

l = [9,3,4,1,6]
m = sorted(l)
print(m)

输出:

[1, 3, 4, 6, 9]

它会保留原始列表。