欢迎访问宙启技术站
智能推送

Python中的“sorted”函数及其实现排序列表

发布时间:2023-05-31 05:25:12

在Python中,sorted函数是一个非常方便的函数,它可以用来对列表进行排序。sorted函数的使用非常简单,只需调用该函数并传入待排序的列表即可。下面我们来探讨一下sorted函数的相关知识。

1. 排序列表

在Python中,我们可以使用sort函数和sorted函数来对列表进行排序。sort函数是在原地对列表进行排序,不会返回一个新的已排序的列表。sorted函数则会返回一个新的已排序的列表。

示例代码如下:

lst = [4, 2, 7, 1, 9]
lst.sort()
print(lst)  # [1, 2, 4, 7, 9]

lst = [4, 2, 7, 1, 9]
new_lst = sorted(lst)
print(new_lst)  # [1, 2, 4, 7, 9]

可以发现,lst.sort()会直接修改lst,而sorted(lst)不会改变原列表,而是返回一个新的已排序的列表。

2. sorted函数的使用

sorted函数的使用非常简单,只需传入待排序的列表即可。如果想要按照指定的方式进行排序,则可以传入一个key函数,key函数接受一个参数并返回一个值,用来决定元素的排序方式。

示例代码如下:

lst = [(1, 2), (2, 1), (3, 4), (4, 3)]
new_lst = sorted(lst, key=lambda x: x[1])
print(new_lst)  # [(2, 1), (1, 2), (4, 3), (3, 4)]

可以看到,我们使用了一个lambda表达式来指定排序方式。这里我们按照元组的第二个元素进行排序。

3. sorted函数的实现

当我们使用sorted函数对列表进行排序时,其实sorted函数是使用一种称为“归并排序”的算法来排序的。

归并排序是一种典型的分治算法,它的基本思想是将待排序的序列分成两个子序列,对子序列进行归并排序,然后再将两个已排序的子序列合并成一个有序的序列。

归并排序的具体实现可以参考下面的代码:

def merge(l1, l2):
    result = []
    i, j = 0, 0
    while i < len(l1) and j < len(l2):
        if l1[i] < l2[j]:
            result.append(l1[i])
            i += 1
        else:
            result.append(l2[j])
            j += 1
    result += l1[i:]
    result += l2[j:]
    return result

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst) // 2
    left_lst = lst[:mid]
    right_lst = lst[mid:]
    left_lst = merge_sort(left_lst)
    right_lst = merge_sort(right_lst)
    return merge(left_lst, right_lst)

lst = [4, 2, 7, 1, 9]
new_lst = merge_sort(lst)
print(new_lst)  # [1, 2, 4, 7, 9]

在这段代码中,我们定义了一个merge函数,用来将两个已排序的子序列合并成一个有序的序列。然后定义了一个merge_sort函数,用来将待排序的序列拆分成两个子序列,并对子序列进行归并排序,最后将两个已排序的子序列合并成一个有序的序列。

以上就是sorted函数及其排序列表的详细介绍,欢迎大家学习。