版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/79584196
今天在LeetCode上刷题的时候要用到排序函数,刚开始并没有意识到这两个排序函数的区别,导致产生了代码错误,特贴此帖。
首先这两个函数都能够实现排序的功能,但是原理却有很多的不同。先看如下代码:
listA = [1, 3, 6, 3, 2]
newList_1 = listA.sort()
print(listA)
print(newList_1)
输出的结果是:
[1, 2, 3, 3, 6]
None
有木有感到很奇怪,为什么listA的值变成了排序后的结果,但是newList_1却是None呢?查看源码:
def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__
""" L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
pass
原来sort()方法是在原来的列表上直接进行排序,并没有返回一个新的列表,所以返回值为None!
再看看:
listA = [1, 3, 6, 3, 2]
newList_2 = sorted(listA)
print(newList_2)
print(listA)
输出的结果是:
[1, 2, 3, 3, 6]
[1, 3, 6, 3, 2]
有木有很神奇?listA并没有发生变化,但是返回的结果就成了排序后的列表。再来看看源码:
def sorted(*args, **kwargs): # real signature unknown
"""
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
"""
pass
由以上可知,sorted()函数排好序后会返回一个新的列表,原来的列表并没有发生改变!
嗨呀,真的是厉害了,我的哥!