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

Python中sorted函数的用法和排序技巧

发布时间:2023-06-11 16:43:46

sorted函数是Python内置的一个排序函数,它可以对列表、元组等可迭代对象进行排序。本文将详细介绍sorted函数的用法和排序技巧。

一、sorted函数的用法

1. 语法格式

sorted(iterable, reverse=False, key=None)

其中,iterable是要排序的可迭代对象;reverse是一个布尔值,用于决定排序是否降序,默认为False;key是一个可调用对象,用于从每个元素中提取一个用于比较的键值,默认为None。

2. 返回值

sorted函数返回一个新的按照指定方式排序的列表。

3. 使用示例

# 对列表进行升序排序

lst = [5, 2, 3, 1, 4]

res = sorted(lst)

print(res)    # [1, 2, 3, 4, 5]

# 对列表进行降序排序

lst = [5, 2, 3, 1, 4]

res = sorted(lst, reverse=True)

print(res)    # [5, 4, 3, 2, 1]

# 对字符串列表进行排序

lst = ['hello', 'world', 'python', 'java']

res = sorted(lst, key=len)

print(res)    # ['java', 'hello', 'world', 'python']

# 对字典列表进行排序

lst = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 22}]

res = sorted(lst, key=lambda x: x['age'])

print(res)    # [{'name': 'Bob', 'age': 18}, {'name': 'Alice', 'age': 20}, {'name': 'Charlie', 'age': 22}]

二、排序技巧

1. 列表排序后保持原有顺序

有时候我们需要对列表进行排序,但又要保证原先相等的元素顺序不变。这时,可以传入一个自定义函数作为key参数,该函数返回元素的索引值。

# 列表排序后保持原有顺序

lst = [5, 2, 3, 1, 4, 3]

res = sorted(lst, key=lambda x: (x, lst.index(x)))

print(res)    # [1, 2, 3, 3, 4, 5]

2. 对多个关键字进行排序

有时候我们需要对多个关键字进行排序,比如按照姓名和年龄依次排序。这时,可以传入一个元组作为key参数,元组中的每个元素表示一个排序关键字。

# 对多个关键字进行排序

lst = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 22}]

res = sorted(lst, key=lambda x: (x['age'], x['name']))

print(res)    # [{'name': 'Bob', 'age': 18}, {'name': 'Alice', 'age': 20}, {'name': 'Charlie', 'age': 22}]

3. 排序算法选择

sorted函数默认使用Timsort算法进行排序,它是一种融合了归并和插入排序思想的算法,适用于各种数据分布情况。但是,在某些情况下,需要根据数据分布情况选择不同的排序算法,比如插入排序适用于接近有序的数据,而快速排序适用于随机分布的数据。

# 排序算法选择

import random

import time

lst1 = list(range(10000))

lst2 = [random.randint(0, 10000) for i in range(10000)]

t1 = time.time()

sorted(lst1)

t2 = time.time()

print('耗时:', t2 - t1)    # 耗时: 0.0009970664978027344

t1 = time.time()

sorted(lst2)

t2 = time.time()

print('耗时:', t2 - t1)    # 耗时: 0.021930932998657227

4. 利用sorted函数进行去重

利用sorted函数可以对列表进行去重处理,即去除重复的元素,并将结果按照某种规则排序。

# 利用sorted函数进行去重

lst = [1, 3, 2, 4, 2, 1, 3]

res = sorted(set(lst), reverse=True)

print(res)    # [4, 3, 2, 1]

5. 对列表进行稳定排序

稳定排序的含义是,对于列表中相同的元素,排序后它们之间的相对顺序不变。sorted函数默认使用Timsort算法进行排序,是一种稳定排序算法。但是,在某些情况下,需要使用其他稳定排序算法,比如归并排序。

# 对列表进行稳定排序

lst = [{'name': 'Bob', 'age': 18}, {'name': 'Alice', 'age': 20}, {'name': 'Charlie', 'age': 18}]

res = sorted(lst, key=lambda x: x['age'])

print(res)    # [{'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 18}, {'name': 'Alice', 'age': 20}]