python实现排序的方法:sort()函数,sorted()函数和lambda函数

在Python中,排序函数是非常常用的功能,主要用于对列表中的元素进行排序。Python 提供了内置的排序方法,它们简单易用且性能高效。以下是 Python 中用于排序的主要函数和方法:

1.list.sort()方法

这是列表对象的一个方法,用于就地(in-place)排序列表,即它会修改原始列表
语法: list.sort(key=None, reverse=False)
key: 一个函数,用来提取比较键(例如,str.lower 可以忽略大小写排序字符串)。
reverse: 如果为 True,则按降序排序,默认为 False(升序)

2.sorted()内置函数

这是一个内建函数,可以接受任何可迭代对象,并返回一个新的已排序列表,不会改变原列表
语法:sorted(iterable, key=None, reverse=False)
参数与 list.sort() 相同,但 iterable 可以是任何可迭代对象,不仅仅是列表。

下面是使用这两个函数的例子:

# 使用 list.sort() 方法
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # 输出: [1, 2, 5, 5, 6, 9]

# 使用 sorted() 函数
words = ['apple', 'Banana', 'cherry']
sorted_words = sorted(words, key=str.lower)
print(sorted_words)  # 输出: ['apple', 'Banana', 'cherry']

# 按降序排序
numbers.sort(reverse=True)
print(numbers)  # 输出: [9, 6, 5, 5, 2, 1]

# 使用自定义排序标准
data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
sorted_data = sorted(data, key=lambda x: x['age'])
print(sorted_data)  # 输出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}]

注意:

list.sort() 和 sorted() 都是稳定排序算法(stable sort),意味着如果两个元素相等,那么排序后它们的相对顺序将保持不变。

lambda函数排序

lambda 函数进行排序通常是为了指定一个自定义的排序规则。

举例:

如果你有一个数字列表,想按降序排列,可以这样做:

对简单数据类型排序

numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers_desc = sorted(numbers, key=lambda x: -x)
print(sorted_numbers_desc)  # 输出: [9, 6, 5, 5, 2, 1]

这里 -x 是为了实现降序排列,不过更常见的做法是直接使用 reverse=True 参数。

对元组或对象排序

当你有一个包含多个元素的元组列表,并且想要根据其中一个特定的元素进行排序时,你可以用 lambda 来提取那个元素作为排序键:

people = [('Alice', 30), ('Bob', 25), ('Charlie', 35)]
# 按年龄排序
sorted_people = sorted(people, key=lambda person: person[1])
print(sorted_people)  # 输出: [('Bob', 25), ('Alice', 30), ('Charlie', 35)]

对字典排序

如果要对字典列表进行排序,也可以使用 lambda 提取字典中的值作为排序键:

data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
# 按 'age' 键的值排序
sorted_data = sorted(data, key=lambda item: item['age'])
print(sorted_data)  # 输出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

复杂排序

还可以创建更加复杂的 lambda 表达式来进行多条件排序。例如,先按年龄排序,如果年龄相同则按名字字母顺序排序:

data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 30}, {'name': 'David', 'age': 25}]
# 先按年龄升序,再按名字字母顺序排序
sorted_data_complex = sorted(data, key=lambda item: (item['age'], item['name']))
print(sorted_data_complex)
# 输出: [{'name': 'Bob', 'age': 25}, {'name': 'David', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 30}]

在这个例子中,我们传递了一个包含两个元素的元组给 key 参数,以实现多条件排序。Python 的排序是稳定排序,所以对于相同的第一个排序键(如相同的年龄),它会保持原始的相对顺序,除非我们提供了第二个排序键(如名字)来进一步细化排序。

你可能感兴趣的:(python,开发语言)