Python列表sort()方法为什么返回NoneType而非列表类型?
现象产生原因
Python列表的sort()方法是原地操作方法,设计逻辑是直接修改调用它的原列表本身的元素顺序,不会生成新的排序后列表,该方法的固定返回值为None。
对应测试代码的执行逻辑:
- 执行
a2 = a1.sort()时,首先直接修改原列表a1的元素顺序为升序,再将sort()返回的None赋值给变量a2,因此a2的类型为NoneType。 - 执行
a3 = a1时,是将a3指向和a1完全相同的列表对象,由于sort()已经修改了原列表的内容,因此a1和a3打印出来都是排序完成的状态。
正确用法
- 如果需要保留原列表、拿到排序后的新列表,使用内置函数
sorted(),该函数会返回排序完成的新列表,不会改动原列表:
a1 = [0, 1, 22, 3] a2 = sorted(a1) a3 = a1 print(a1,a2,a3) # 输出:[0, 1, 22, 3] [0, 1, 3, 22] [0, 1, 22, 3]
- 如果不需要保留原列表的原始顺序,直接调用
sort()即可,不要接收它的返回值:
a1 = [0, 1, 22, 3] a1.sort() print(a1) # 输出:[0, 1, 3, 22]
注:Python中很多针对可变对象的原地操作方法都遵循这个设计逻辑,比如列表的
append()、reverse()等,返回值都是None,不要把这类方法的调用结果赋值给变量。
内容的提问来源于stack exchange,提问作者Behzadnn
相关产品推荐
相关产品推荐

