Python 列表排序

在 Python 中,想要对列表元素排序,常用的有以下 2 种方式。

  • 使用 sort() 方法。
  • 使用 sorted() 函数。

使用 sort() 方法对列表排序

sort() 是 Python 列表的一个方法,它用于实现列表元素的排序(升序或降序)。

语法:

list.sort(key=fn, reverse=TrueFalse)

说明:

sort() 函数接收以下 2 个参数。

  • key(可选):它的值是一个函数名,用于定义排序规则,默认值为 None。
  • reverse(可选):它的值是一个布尔值,用于表示升序还是降序,默认值为 False。当 reverse=False 时,表示升序(从小到大)。当 reverse=True 时,表示降序(从大到小)。如果 sort() 不写参数,就默认使用 reverse=False。

示例 1:sort() 按升序排列

nums = [3, 9, 1, 12, 50, 21]
nums.sort()
print(nums)

运行结果如下。

[1, 3, 9, 12, 21, 50]

分析:

nums.sort() 等价于 nums.sort(reverse=False),表示升序(也就是从小到大排列)。

示例 2:sort() 按降序排列

nums = [3, 9, 1, 12, 50, 21]
nums.sort(reverse=True)
print(nums)

运行结果如下。

[50, 21, 12, 9, 3, 1]

分析:

nums.sort(reverse=True) 使用的是降序,也就是从大到小排列。

示例 3:key 参数的值是 “内置函数”

colors = ['red', 'orange', 'yellow', 'green', 'blue']
colors.sort(key=len)
print(colors)

运行结果如下。

['red', 'blue', 'green', 'orange', 'yellow']

分析:

colors.sort(key=len) 中的 “key=len” 表示使用 Python 内置函数 len() 作为参数,此时会根据元素的长度来排序。

示例 4:key 参数的值是 “自定义函数”

def by_age(lst):
    return lst[1]

students = [('Jack', 21), ('Lucy', 19), ('Tony', 20)]
students.sort(key=by_age)
print(students)

运行结果如下。

[('Lucy', 19), ('Tony', 20), ('Jack', 21)]

分析:

上面定义了一个名为 by_age 的函数,用于实现根据元组第 2 个元素(即年龄)进行排序。这种方式在某些场景中很有用,比如根据员工的薪水进行排序。

使用 sorted() 函数对列表排序

sorted() 是 Python 的一个内置函数,它用于对一个可迭代对象中的所有元素排序,并且返回一个列表作为结果。

语法:

sorted(iterable, key=None, reverse=False)

说明:

sorted() 函数接收以下 3 个参数。

  • iterable(必选):是一个可迭代对象,比如元组、列表、字典等。
  • key(可选):用于排序比较的函数,默认为 None。
  • reverse(可选):用于排序的规则,默认为 False。如果为 True,则表示降序排列;如果为 False,则表示升序排列。

示例 5:sorted() 按升序排列

nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums)
print(result)

运行结果如下。

[1, 3, 9, 12, 21, 50]

分析:

sorted(nums) 等价于 sorted(nums, reverse=False),表示对 nums 升序(也就是从小到大排列)。

示例 6:sorted() 按降序排列

nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums, reverse=True)
print(result)

运行结果如下。

[50, 21, 12, 9, 3, 1]

分析:

sorted(nums, reverse=True) 表示对 nums 使用降序,也就是从大到小排列。

示例 7:sorted() 对复杂列表排序

users = [('Tony', 20), ('Jack', 21), ('Lucy', 19)]
result = sorted(users, key=lambda user: user[0])
print(result)

运行结果如下。

[('Jack', 21), ('Lucy', 19), ('Tony', 20)]

分析:

key 的值是一个函数,这个函数应该接收一个参数,然后返回一个用于排序的 key 值。该函数只需要调用一次,所以排序速度很快。

users 是一个列表,这个列表的每一个元素是一个元组。lambda 表达式本质上就是一个函数,lambda user:user[0] 表示函数的参数是 user,也就是 user 这个列表的每一个元素。user[0] 表示这个 lambda 表达式最终返回的是元组的第 1 个元素。也就是说,此时用于排序的是每一个用户的姓名。

如果想要对每一个用户的年龄进行排序,此时也十分简单。只需要修改一下 lambda 表达式的返回值就可以了,代码如下。

result = sorted(users, key=lambda user: user[1])

sort() 方法与 sorted() 函数的区别

sort() 方法和 sorted() 函数虽然看起来很像,但它们是完全不同的两个东西,它们之间的区别如下:

  • sort():是列表的一个方法,它会修改原列表。
  • sorted():是一个内置函数,它不会修改原列表。此外,sorted() 还可以用于字典等的排序。

示例 8:sort() 方法

nums = [3, 9, 1, 12, 50, 21]
nums.sort()
print(nums)

运行结果如下。

[1, 3, 9, 12, 21, 50]

分析:

sort() 方法会直接对原列表进行修改,但很多时候并不希望原列表被修改,此时就可以使用 sorted() 函数来实现。

示例 9:sorted() 函数

nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums)
print(nums)
print(result)

运行结果如下。

[3, 9, 1, 12, 50, 21]
[1, 3, 9, 12, 21, 50]

分析:

sorted() 函数并不会影响原列表,而是会返回一个新列表。

上一篇: Python 二维列表

下一篇: Python 列表推导式

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号