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

Python的sorted函数:如何对列表进行排序

发布时间:2023-05-20 03:27:20

Python是一种非常流行的编程语言,它不仅支持面向对象编程,还有丰富的库函数。这些库函数大大简化了程序的编写过程,其中一个重要的函数就是sorted()函数。在本文中,我们将重点介绍Python的sorted()函数,以及如何使用它对列表进行排序。

1. sorted()函数的使用方法

sorted()函数可以对列表、元组、字符串、字典和集合等数据类型进行排序。它的使用方法很简单,只需在函数中传入一个可迭代对象,即可返回一个新的排好序的列表。例如:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst)

print('原始列表:', lst)
print('新的排好序的列表:', new_lst)

输出结果如下:

原始列表: [3, 1, 4, 5, 2]
新的排好序的列表: [1, 2, 3, 4, 5]

2. sorted()函数的参数

sorted()函数除了可以传入待排序的列表之外,还可以传入一些参数来控制排序的方式。下面我们将介绍一些比较常用的参数。

2.1. reverse参数

reverse参数用于控制排序的方向,如果reverse=True,表示将列表逆序排列,否则按照默认顺序进行排列。例如:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst, reverse=True)

print('原始列表:', lst)
print('新的逆序排列的列表:', new_lst)

输出结果如下:

原始列表: [3, 1, 4, 5, 2]
新的逆序排列的列表: [5, 4, 3, 2, 1]

2.2. key参数

key参数用于指定排序的关键字,即按照某个属性或者函数的返回值进行排序。例如:

lst = [(3, 'a'), (1, 'b'), (4, 'c'), (5, 'd'), (2, 'e')]
new_lst = sorted(lst, key=lambda x: x[1])

print('原始列表:', lst)
print('新的按照第二个元素排序的列表:', new_lst)

输出结果如下:

原始列表: [(3, 'a'), (1, 'b'), (4, 'c'), (5, 'd'), (2, 'e')]
新的按照第二个元素排序的列表: [(3, 'a'), (1, 'b'), (4, 'c'), (2, 'e'), (5, 'd')]

上述代码中,我们使用了lambda表达式来指定排序的关键字,x表示待排序的元素,x[1]表示取元素的第二个元素值作为排序的依据。

3. 对列表进行排序的方式

Python的sorted()函数提供了多种排序方式,下面我们将分别介绍这些排序方式的特点和使用方法。

3.1. 冒泡排序

冒泡排序是一种经典的排序算法,其思想是将相邻的两个元素进行比较和交换,每一轮可以确定一个元素的位置。冒泡排序的时间复杂度为O(n^2),在处理大规模数据时效率比较低。冒泡排序的代码实现如下:

def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(n-i-1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

使用sorted()函数可以轻松实现冒泡排序:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst)

print('原始列表:', lst)
print('新的排好序的列表:', new_lst)

输出结果如下:

原始列表: [3, 1, 4, 5, 2]
新的排好序的列表: [1, 2, 3, 4, 5]

3.2. 选择排序

选择排序是一种简单的排序算法,其思想是每次从待排序列中选出最小的元素,然后将其放在已排序序列的末尾。选择排序的时间复杂度为O(n^2),与冒泡排序相同,但选择排序的空间复杂度为O(1),比冒泡排序更加优秀。选择排序的代码实现如下:

def selection_sort(lst):
    n = len(lst)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if lst[j] < lst[min_index]:
                min_index = j
        lst[i], lst[min_index] = lst[min_index], lst[i]
    return lst

使用sorted()函数可以轻松实现选择排序:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst)

print('原始列表:', lst)
print('新的排好序的列表:', new_lst)

输出结果如下:

原始列表: [3, 1, 4, 5, 2]
新的排好序的列表: [1, 2, 3, 4, 5]

3.3. 插入排序

插入排序是一种简单而有效的排序算法,其思想是将待排序序列分为已排序和未排序两部分,每次从未排序序列中取出一个元素,在已排序序列中找到合适的位置插入。插入排序的时间复杂度为O(n^2),但在处理小规模数据时具有较高的效率。插入排序的代码实现如下:

def insertion_sort(lst):
    n = len(lst)
    for i in range(1, n):
        j = i
        while j > 0 and lst[j] < lst[j-1]:
            lst[j], lst[j-1] = lst[j-1], lst[j]
            j -= 1
    return lst

使用sorted()函数可以轻松实现插入排序:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst)

print('原始列表:', lst)
print('新的排好序的列表:', new_lst)

输出结果如下:

原始列表: [3, 1, 4, 5, 2]
新的排好序的列表: [1, 2, 3, 4, 5]

3.4. 希尔排序

希尔排序是一种高效的插入排序算法,也被称为缩小增量排序。它的基本思想是将整个序列分为几个子序列,对每个子序列进行插入排序,然后逐步缩小子序列的大小,最后合并为一整个有序序列。希尔排序的时间复杂度为O(n^1.3),要优于直接插入排序。希尔排序的代码实现如下:

def shell_sort(lst):
    n = len(lst)
    gap = n // 2
    while gap > 0:
        for i in range(gap, n):
            j = i
            while j >= gap and lst[j] < lst[j-gap]:
                lst[j], lst[j-gap] = lst[j-gap], lst[j]
                j -= gap
        gap //= 2
    return lst

使用sorted()函数可以轻松实现希尔排序:

lst = [3, 1, 4, 5, 2]
new_lst = sorted(lst)

print('原始列表:', lst)
print('新的排好序的列表:', new_lst)

输出结果如下:

`python