文章目录
{ .ImgAlt }}

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

本文描述了如何对 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)

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

  • 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()函数对列表进行排序。

腾讯云:新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。



如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/python-list-sort/

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议
腾讯云学生服务器_学生机_云服务器优惠套餐-云+校园 - 腾讯云

相关推荐