本篇我们介绍如何使用列表的 sort() 方法对元素进行排序。
列表 sort() 方法
如果想要对列表中的元素进行排序,可以使用 sort() 方法:
list.sort()
sort() 方法执行的是原地(in place)排序,意味着它会改变列表中元素的位置。
默认情况下,sort() 方法使用小于运算符对列表元素进行排序。也就是说,更小的元素排在前面,更大的元素排在后面。
如果想要对列表元素进行从大到小排序,可以指定参数 reverse=True。例如:
list.sort(reverse=True)
列表排序示例
接下来我们看几个使用 sort() 方法排序的示例。
示例一:字符串列表排序
如果列表的元素为字符串,sort() 方法按照字母顺序进行排序。
以下示例使用 sort() 方法对列表 guests 中的元素进行排序:
guests = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer']
guests.sort()
print(guests)
输出结果如下:
['James', 'Jennifer', 'John', 'Mary', 'Patricia', 'Robert']
下面的示例使用 sort() 方法和 reverse=True 参数对列表 guests 中的元素进行反向排序:
guests = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer']
guests.sort(reverse=True)
print(guests)
输出结果如下:
['Robert', 'Patricia', 'Mary', 'John', 'Jennifer', 'James']
示例二:数字列表排序
如果列表的元素为数字,sort() 方法按照从小到大的顺序进行排序。
以下示例使用 sort() 方法对列表 scores 中的数字从小到大进行排序:
scores = [5, 7, 4, 6, 9, 8]
scores.sort()
print(scores)
输出结果如下:
[4, 5, 6, 7, 8, 9]
如果想要对数字按照从大到小的顺序排序,可以使用 sort(reverse=True):
scores = [5, 7, 4, 6, 9, 8]
scores.sort(reverse=True)
print(scores)
输出结果如下:
[9, 8, 7, 6, 5, 4]
示例三:元组列表排序
假如存在以下由元组构成的列表:
companies = [('Google', 2019, 134.81),
('Apple', 2019, 260.2),
('Facebook', 2019, 70.7)]
现在我们想要按照收入从高到低对这些公司进行排序。
首先,指定一个排序关键字并传递给 sort() 方法。为了定义排序关键字,我们可以创建一个函数,参数为元组,返回值为排序的元素:
def sort_key(company):
return company[2]
以上 sort_key() 函数接收一个名为 company 的参数并返回它的第三个元素。其中,company 是一个元组(例如 (‘Google’, 2019, 134.81)),company[2] 代表了收入(例如 134.81)。
然后,将 sort_key 函数传递给 sort() 方法:
companies.sort(key=sort_key, reverse=True)
sort() 方法会使用函数 sort_key() 返回的结果进行比较。
注意,我们只需要将函数名 sort_key 传递给 sort() 方法,函数名后面没有括号。
完整的代码如下:
companies = [('Google', 2019, 134.81),
('Apple', 2019, 260.2),
('Facebook', 2019, 70.7)]
# define a sort key
def sort_key(company):
return company[2]
# sort the companies by revenue
companies.sort(key=sort_key, reverse=True)
# show the sorted companies
print(companies)
输出结果如下:
[('Apple', 2019, 260.2), ('Google', 2019, 134.81), ('Facebook', 2019, 70.7)]
使用 lambda 表达式
为了使代码更加精简, Python 允许定义没有名字的函数:
lambda arguments: expression
没有名字的函数被称为匿名函数,以上语句被称为 lambda 表达式。
从技术上来说,lambda 表达式等价于以下函数:
def name(arguments):
return expression
以下示例使用 lambda 表达式按照收入从低到高进行排序:
companies = [('Google', 2019, 134.81),
('Apple', 2019, 260.2),
('Facebook', 2019, 70.7)]
# sort the companies by revenue
companies.sort(key=lambda company: company[2])
# show the sorted companies
print(companies)
输出结果如下:
[('Facebook', 2019, 70.7), ('Google', 2019, 134.81), ('Apple', 2019, 260.2)]
总结
- 列表的 sort() 方法用于原地排序。
- sort() 方法对字符串使用字母顺序排序,对数字从小到大进行排序。
- sort(reverse=True) 用于反向排序。