Python:链式调用不符合预期——创建并排序列表遇问题
为什么链式调用
.sort()会得到None? 嘿,这个问题其实挺典型的,很多刚接触Python的朋友都会踩这个坑,我来给你讲明白~
核心原因:sort()是原地排序方法,返回None
Python里列表的sort()方法设计思路是直接修改原列表(也就是“原地排序”),它不会创建并返回一个新的排序后的列表。所以当你写:
mylist = [4, 1, 2, 6, 0, 9].sort()
这段代码会先创建临时列表[4,1,2,6,0,9],然后调用它的sort()方法把这个临时列表排序,但sort()方法本身返回的是None,最后这个None就被赋值给了mylist,这就是你得到None的原因。
而分开写的情况:
mylist = [4, 1, 2, 6, 0, 9] mylist.sort()
这里是先把列表赋值给mylist,然后调用mylist.sort()修改这个变量指向的列表本身,所以之后mylist自然就是排序后的结果了。
想要链式调用?用sorted()就对了
如果想一步完成“创建列表+排序+赋值”的操作,你应该用Python内置的sorted()函数。它会接受一个可迭代对象,返回一个新的排序后的列表,原对象不会被修改,完美适配链式场景:
mylist = sorted([4, 1, 2, 6, 0, 9]) print(mylist) # 输出:[0, 1, 2, 4, 6, 9]
再总结下两者的区别
list.sort():列表专属方法,原地修改原列表,返回Nonesorted():内置通用函数,接受所有可迭代对象(列表、元组、字符串等),返回新的排序后的列表,原对象保持不变
内容的提问来源于stack exchange,提问作者Cryn
相关产品推荐
相关产品推荐

