本篇我们介绍如何使用列表的 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) 用于反向排序。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐