我正在开始使用python,并对为什么以下输出None
感到有些困惑:
x= [3,1,2]
y = x.sort()
print(y) # output = None
我期望输出为[1,2,3],但我却得到None。 请注意:我知道现在如何获取正确的输出,但仍然对这里发生的一切都不为人所知。 在我看来,第二行评估 x.sort()设为[1,2,3],然后将其分配给变量y。
答案 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()
内置函数,可从可迭代对象构建新的排序列表。
尝试一下:
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
复制对象。因此,您的y
是None
。但是,如果您检查x
本身,则它已被修改,不再保存原始列表。
答案 6 :(得分:0)
您正在执行的操作不起作用的原因是方法sort()
没有返回任何内容。相反,它将自身应用于调用它的对象(在这种情况下为x
),但不返回任何结果。
您可以使用print(x.sort())
(返回None
)进行验证。
要实现所需的功能,您可以先复制x:y = x.copy()
,然后对y:y.sort()
进行排序。
在这里,您可以检查x
仍然等于[3,1,2]
,而y
等于[1,2,3]