为何执行print(list.sort())会输出None而非排序后的列表?
为何执行print(list.sort())会输出None而非排序后的列表?
嗨,这个问题其实是Python新手很容易踩的小坑,我给你唠明白~
核心原因在于列表的sort()方法是「原地修改」类型的方法:
- 当你调用
list.sort()时,它会直接对原列表进行排序修改,不会创建并返回一个新的排序后的列表。 - 这类原地操作的方法,Python设计它们的返回值为
None,目的是明确告诉你:“我已经修改了原来的对象,没有新东西给你返回哦”。
咱们结合你的代码例子来看:
第一个代码片段:
list = [5, 1, 2] print(list.sort())
这里你调用list.sort()后,原列表确实已经被改成[1, 2, 5]了,但print()打印的是list.sort()这个方法调用的返回值——也就是None,所以最终输出就是None。
而第二个代码片段:
list.sort() print(list)
这里先执行list.sort()完成对原列表的排序,然后print()直接输出已经被修改后的原列表,自然就得到了排序后的[1, 2, 5]。
顺带提个实用小技巧:如果你不想修改原列表,还想直接得到排序后的新列表,可以用Python内置的sorted()函数,它会返回一个排序好的新列表,原列表保持不变:
list = [5, 1, 2] print(sorted(list)) # 输出 [1, 2, 5] print(list) # 原列表依旧是 [5, 1, 2]
备注:内容来源于stack exchange,提问作者JohnE
相关产品推荐
相关产品推荐

