文章目录
本文最先发布在: https://cloud.tencent.com/developer/article/1639076
数据排序,是使用 Python 进行工作时最普通的任务。例如,你想要按照名字来对一列团队成员名单进行排序,或者想按照优先级来对一列项目进行排序。
本文描述了如何对 Python 中的列表进行排序。
sort()
和 sorted()
在 Python 中,你可以使用内建的 list.sort()
方法和 sorted()
函数对列表进行排序。
sorted()
函数创建了一个新的排序列表,而内建的list.sort()
方法直接进行排序。如果你想保存原来未排序的列表,使用 sorted()
函数。另外一个不同点就是,sorted()
对任何可迭代的对象有效果。
sort()
和 sorted()
语法如下:
list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)
可选的关键词参数key
和reverse
有下面的意思:
key
- 带有一个参数的函数,并且在对比之前先计算出来。这个函数必须返回一个值,用来做排序对比。reverse
- reverse值可能是True
或者False
。默认值是False
。当参数被设置成 True
,这个排序列表将会按照反序进行排序。列表中的元素使用"小于"号进行比较,并且按照升序排列顺序。小于号不支持将字符串和整数进行对比,因此,如果你有一个列表包含字符串和整数,这个排序操作将会失败。
下面的例子显示如何以字母顺序对一个字符串列表进行排序:
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']
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)
我们正在使用一个匿名函数,返回元祖第一个元素。这个列表将会按照函数返回值来进行排序:
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
值,并用来对比:
Sorted list: [
{'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
{'name': 'Iron', 'number': 26, 'symbol': 'fe'},
{'name': 'Silver', 'number': 47, 'symbol': 'ag'}
]
还有一个更好,更快的方法就是使用操作符模块函数。
下面是一个例子:
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)
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()
函数对列表进行排序。
如果你有任何疑问,请通过以下方式联系我们:
微信:
微信群: 加上面的微信,备注微信群
QQ: 3217680847
QQ 群: 82695646
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有