Python中排序函数sort()和sorted()的区别(这是一个大坑)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()函数排好序后会返回一个新的列表,原来的列表并没有发生改变!

嗨呀,真的是厉害了,我的哥!

猜你喜欢

转载自blog.csdn.net/sinat_35512245/article/details/79584196