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

排序算法:Python中常用的排序函数有哪些?

发布时间:2023-06-18 13:01:52

Python中常用的排序函数有:

1. sorted()

sorted()可以对列表、元组等类型进行排序,它的返回值是一个新的有序列表,不会改变原来的列表。sorted()函数允许传入参数key,用于自定义排序规则。默认情况下,sorted()函数按照升序排列,如果要按照降序排列,需要传入reverse=True参数。

示例:

a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
b = sorted(a)
print(b)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
c = sorted(a, reverse=True)
print(c)  # [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

# 自定义排序规则
d = [(3, 2), (1, 5), (2, 7), (4, 3)]
e = sorted(d, key=lambda x: x[1])
print(e)  # [(3, 2), (4, 3), (1, 5), (2, 7)]

2. sort()

sort()和sorted()函数类似,只不过sort()是对原来的列表进行排序,而不是返回一个新的有序列表。

示例:

a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
a.sort()
print(a)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

3. heapq.nlargest()和heapq.nsmallest()

heapq模块提供了一些函数用于从列表或者可迭代对象中获取最大或最小的n个元素。

示例:

import heapq

a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
b = heapq.nlargest(3, a)
print(b)  # [9, 6, 5]
c = heapq.nsmallest(3, a)
print(c)  # [1, 1, 2]

d = [{'name': 'Tom', 'age': 20}, {'name': 'Jerry', 'age': 18}, {'name': 'Bob', 'age': 22}]
e = heapq.nlargest(2, d, key=lambda x: x['age'])
print(e)  # [{'name': 'Bob', 'age': 22}, {'name': 'Tom', 'age': 20}]

4. list.sort()

list.sort()函数和sort()函数类似,也可以对列表进行排序,只不过list.sort()是对原来的列表进行排序,而不是返回一个新的有序列表。

示例:

a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
a.sort()
print(a)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

5. numpy.sort()

numpy.sort()函数可以用于排序numpy数组或矩阵。默认情况下,它按照升序排列,如果要按照降序排列,需要传入参数kind='quicksort',kind='heapsort'或kind='mergesort'。

示例:

import numpy as np

a = np.array([[3, 1, 4], [1, 5, 9], [2, 6, 5], [3, 5, 7]])
b = np.sort(a)
print(b)
# [[ 1  3  4]
#  [ 1  5  9]
#  [ 2  5  6]
#  [ 3  5  7]]

c = np.sort(a, axis=0)
print(c)
# [[ 1  1  4]
#  [ 2  5  5]
#  [ 3  6  5]
#  [ 3  5  9]]

6. operator模块

operator模块提供了一些函数用于排序,例如itemgetter、attrgetter和methodcaller。这些函数作为key参数传递给sorted()函数或者list.sort()函数,可以方便地实现按照某些属性进行排序。

示例:

from operator import itemgetter, attrgetter

students = [('Tom', 20, 80), ('Jerry', 18, 90), ('Bob', 22, 85)]
a = sorted(students, key=itemgetter(0))  # 按照姓名进行排序
print(a)  # [('Bob', 22, 85), ('Jerry', 18, 90), ('Tom', 20, 80)]

b = sorted(students, key=itemgetter(1))  # 按照年龄进行排序
print(b)  # [('Jerry', 18, 90), ('Tom', 20, 80), ('Bob', 22, 85)]

c = sorted(students, key=itemgetter(2), reverse=True)  # 按照成绩进行降序排序
print(c)  # [('Jerry', 18, 90), ('Bob', 22, 85), ('Tom', 20, 80)]

以上就是Python中常用的排序函数的详细介绍。这些函数包含了不同的排序算法和自定义规则的实现形式,能够满足大部分的排序需求。