前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 列表排序

Python 列表排序

作者头像
雪梦科技
修改2020-06-06 00:04:13
1.7K0
修改2020-06-06 00:04:13
举报
文章被收录于专栏:ITCoder

文章目录

本文最先发布在: https://cloud.tencent.com/developer/article/1639076

数据排序,是使用 Python 进行工作时最普通的任务。例如,你想要按照名字来对一列团队成员名单进行排序,或者想按照优先级来对一列项目进行排序。

本文描述了如何对 Python 中的列表进行排序。

一、Python sort()sorted()

在 Python 中,你可以使用内建的 list.sort()方法和 sorted()函数对列表进行排序。

sorted()函数创建了一个新的排序列表,而内建的list.sort()方法直接进行排序。如果你想保存原来未排序的列表,使用 sorted()函数。另外一个不同点就是,sorted()对任何可迭代的对象有效果。

sort()sorted() 语法如下:

代码语言:javascript
复制
list.sort(key=function, reverse=Boolean)
代码语言:javascript
复制
sorted(iterable, key=function, reverse=Boolean)

可选的关键词参数keyreverse有下面的意思:

  • key - 带有一个参数的函数,并且在对比之前先计算出来。这个函数必须返回一个值,用来做排序对比。
  • reverse - reverse值可能是True或者False。默认值是False。当参数被设置成 True,这个排序列表将会按照反序进行排序。

列表中的元素使用"小于"号进行比较,并且按照升序排列顺序。小于号不支持将字符串和整数进行对比,因此,如果你有一个列表包含字符串和整数,这个排序操作将会失败。

下面的例子显示如何以字母顺序对一个字符串列表进行排序:

代码语言:javascript
复制
directions = ["north", "east", "south", "west"] 

directions.sort()

print('Sorted list:', directions)

输出:

代码语言:javascript
复制
Sorted list: ['east', 'north', 'south', 'west']

如果你想保持原来的列表不变,使用sorted()函数:

代码语言:javascript
复制
directions = ["north", "east", "south", "west"] 

sorted_directions = sorted(directions)

print('Sorted list:', sorted_directions)

输出:

代码语言:javascript
复制
Sorted list: ['east', 'north', 'south', 'west']

想要把列表进行反向排序(降序),将reverse参数设置成True:

代码语言:javascript
复制
directions = ["north", "east", "south", "west"] 

directions.sort(reverse=True)

print('Sorted list:', directions)

输出:

代码语言:javascript
复制
Sorted list: ['west', 'south', 'north', 'east']

二、使用函数进行排序

key参数接收一个函数作为参数,并且允许你执行更复杂的排序操作。

最简单的例子就是按照元素的长度来排序:

代码语言:javascript
复制
directions = ["Arya", "Daenerys", "Jon", "Brienne"] 

directions.sort(key=len)

print('Sorted list:', directions)

我们正在使用len()函数返回字符串中字符的数目,并且将它作为对比因子。

代码语言:javascript
复制
Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']

你也可以创建一个自定义的函数,并且将它作为key参数来进行对比。下面是一个例子,显示如何根据数字各个位数上的数字之和,来进行排序:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
Sorted list: [77, 219, 19, 23, 310]

另外一个例子就是,使用key 参数来对一个复杂的列表进行排序,例如,对元祖列表进行排序:

代码语言:javascript
复制
numbers = [(3, 14), (1, 61), (2, 71)]

numbers.sort(key=lambda k: k[0])

print('Sorted list:', numbers)

我们正在使用一个匿名函数,返回元祖第一个元素。这个列表将会按照函数返回值来进行排序:

代码语言:javascript
复制
Sorted list: [(1, 61), (2, 71), (3, 14)]

同样的方法可以被用来对一个字典列表进行排序:

代码语言:javascript
复制
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值,并用来对比:

代码语言:javascript
复制
Sorted list: [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, 
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, 
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'}
]

还有一个更好,更快的方法就是使用操作符模块函数。

下面是一个例子:

代码语言:javascript
复制
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的值:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年06月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Python sort() 和 sorted()
  • 二、使用函数进行排序
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档