list.sort()不返回排序列表

时间:2019-01-31 13:51:09

标签: python

我正在开始使用python,并对为什么以下输出None感到有些困惑:

x= [3,1,2]
y = x.sort()
print(y)  # output = None

我期望输出为[1,2,3],但我却得到None。 请注意:我知道现在如何获取正确的输出,但仍然对这里发生的一切都不为人所知。 在我看来,第二行评估 x.sort()设为[1,2,3],然后将其分配给变量y。

7 个答案:

答案 0 :(得分:2)

列表文档告诉您,在列表上调用sort方法将执行INPLACE排序。即它将对当前对象内的值进行排序。因此,它不会为您存储在y中返回任何值。

>>> x = [3,1,2]
>>> x.sort()
>>> print(x)
[1, 2, 3]

但是,您可能有合理的理由想要对X的列表进行排序而不实际对其进行更改,而是将排序后的输出存储为新对象。您可以通过将X传递给已排序的函数

来完成此操作
>>> x = [3,1,2]
>>> y = sorted(x)
>>> print(x, y)
[3, 1, 2] [1, 2, 3]

答案 1 :(得分:0)

OP:我期望输出为[1,2,3],但我什么也没得到。

答案:因为它不会返回列表,而是对其进行排序。

因此:

x = [3,1,2]
x.sort()
print(x)

输出:

[1, 2, 3]

编辑:

但是,如果您必须将其分配给y,则可以创建一个新的排序列表,然后进行分配:

x = [3,1,2]
y = sorted(x)
print(y)

输出:

[1, 2, 3]

答案 2 :(得分:0)

代码应为

x= [3,1,2]
x.sort()
print(x)

输出

 [1,2,3]

不需要将x.sort()分配给y

如果要分配给其他变量,请使用:

x= [3,1,2]
y=x.sorted()
print(y)

希望有帮助

答案 3 :(得分:0)

  

Python列表具有内置的list.sort()方法,该方法可以就地修改列表。还有一个sorted()内置函数,可从可迭代对象构建新的排序列表。

来源:Python3 sorting HOW TO


尝试一下:

x = [3,1,5,2,4]
print("x         =", x)
print("sorted(x) =", sorted(x))
print("x         =", x)
print("x.sort()  =", x.sort())
print("x         =", x)

答案 4 :(得分:0)

请参阅文档中的list.sort

  

当空间节省时,此方法修改就位顺序   排序大序列。提醒用户它可以并行运行   效果,它不返回排序顺序(请使用sorted()   明确请求一个新的排序列表实例)。

这就是为什么您的y最终成为None的原因。

x= [3,1,2]
y = sorted(x)
print(y)

有效,因为sorted返回排序后的列表,而不是就地排序。

答案 5 :(得分:0)

这与python对象的可变性有关。 List是可变的。 sort()方法会将in-place更改为列表x,而不会return复制对象。因此,您的yNone。但是,如果您检查x本身,则它已被修改,不再保存原始列表。

答案 6 :(得分:0)

您正在执行的操作不起作用的原因是方法sort()没有返回任何内容。相反,它将自身应用于调用它的对象(在这种情况下为x),但不返回任何结果。

您可以使用print(x.sort())(返回None)进行验证。

要实现所需的功能,您可以先复制x:y = x.copy(),然后对y:y.sort()进行排序。 在这里,您可以检查x仍然等于[3,1,2],而y等于[1,2,3]