对数据进行排序是使用 Python 时最常见的任务之一。例如,您可能希望按姓名对团队成员列表进行排序,或按优先级对项目列表进行排序。
本文介绍了如何排序Python 中的列表
.
Python sort()
and sorted()
#
在 Python 中,您可以使用内置函数对列表进行排序list.sort()
方法或内置sorted()
功能。
The sorted()
函数创建一个新的排序列表,而list.sort()
方法对列表进行就地排序。如果你想保留,未排序的列表使用sorted()
功能。另一个区别是sorted()
函数适用于任何可迭代对象。
语法为sort()
and sorted()
如下:
list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)
可选的关键字参数key
and reverse
有以下含义:
-
key
- 接受一个参数并在比较之前对其进行转换的函数。该函数必须返回一个用于排序比较的值。
-
reverse
- 反向的值可以是True
or False
。默认值为True
。当此参数设置为 false 时,列表按相反顺序排序。
使用“小于”(<
) 运算符并按升序排序。这<
运算符不支持将字符串与整数进行比较,因此如果您有一个包含字符串和整数的列表,则排序操作将失败。
以下示例显示如何按字母顺序对字符串列表进行排序:
directions = ["north", "east", "south", "west"]
directions.sort()
print('Sorted list:', directions)
Sorted list: ['east', 'north', 'south', 'west']
如果您想保持原始列表不变,请使用sorted()
功能:
directions = ["north", "east", "south", "west"]
sorted_directions = sorted(directions)
print('Sorted list:', sorted_directions)
Sorted list: ['east', 'north', 'south', 'west']
要按相反(降序)顺序对列表进行排序,请设置reverse
论证True
:
directions = ["north", "east", "south", "west"]
directions.sort(reverse=True)
print('Sorted list:', directions)
Sorted list: ['west', 'south', 'north', 'east']
用函数排序#
The key
参数接受一个函数并允许您执行更复杂的排序操作。
最简单的例子是根据元素的长度对元素进行排序:
directions = ["Arya", "Daenerys", "Jon", "Brienne"]
directions.sort(key=len)
print('Sorted list:', directions)
我们正在使用len()
函数返回字符串中的字符数,用作比较器:
Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']
您还可以创建自定义函数并将其用作key
进行比较的论证。下面的示例展示了如何根据数字之和对整数列表进行排序:
def sum_digits(num):
digits = [int(x) for x in str(num)]
return sum(digits)
numbers = [23, 77, 19, 310, 219]
numbers.sort(reverse=True, key=sum_digits)
print('Sorted list:', numbers)
Sorted list: [77, 219, 19, 23, 310]
另一个例子是使用 key 参数对复杂列表进行排序,例如元组列表:
numbers = [(3, 14), (1, 61), (2, 71)]
numbers.sort(key=lambda k: k[0])
print('Sorted list:', numbers)
我们使用匿名 (lambda) 函数返回元组的第一个元素。该列表按函数返回的值排序:
Sorted list: [(1, 61), (2, 71), (3, 14)]
可以使用相同的方法对字典列表进行排序:
elements = [
{'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
{'name': 'Silver', 'number': 47, 'symbol': 'ag'},
{'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]
elements.sort(key=lambda k: k['name'])
print('Sorted list:', elements)
lambda 函数返回的值name
key,用于比较:
Sorted list: [
{'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
{'name': 'Iron', 'number': 26, 'symbol': 'fe'},
{'name': 'Silver', 'number': 47, 'symbol': 'ag'}
]
对复杂函数进行排序的更好更快的方法是使用Operator模块功能。这是一个例子:
from operator import itemgetter
elements = [
{'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
{'name': 'Silver', 'number': 47, 'symbol': 'ag'},
{'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]
elements.sort(key=itemgetter('symbol'))
print('Sorted list:', elements)
The itemgetter
函数获取键的值symbol
:
Sorted list: [
{'name': 'Silver', 'number': 47, 'symbol': 'ag'},
{'name': 'Iron', 'number': 26, 'symbol': 'fe'},
{'name': 'Germanium', 'number': 25, 'symbol': 'ge'}
]
结论#
我们已经向您展示了如何使用 Python 对列表进行排序sort()
方法和sorted()
功能。
如果您有任何问题或反馈,请随时发表评论。