Python 列表 sort() 示例

⚡ 智能摘要

Python list sort() 函数按原地排列列表元素,默认情况下按升序排列,或者通过 reverse 参数按降序排列;此外,它还提供一个可选的 key 函数,可以根据自定义条件(例如长度、元组字段或用户定义的函数)进行排序。

  • 🔘 语法: sort() 方法接受可选的 key 和 reverse 参数,并在不创建副本的情况下修改原始列表。
  • ☑️ 订单控制: 将 reverse 参数设置为 True 会将值从高到低排序,而不是默认的升序排序。
  • 关键参数: 像 len 这样的关键函数会根据派生值(例如字符串长度或元组字段)对元素进行排序。
  • 🧪 sort 与 sorted: sort() 方法会就地更改列表并返回 None,而 sorted() 方法会返回一个新列表并保留原始列表。
  • 🛠️ 自定义条件: Lambda 表达式和用户定义的函数允许 sort() 按任何选定的属性对元组、字典和命名元组进行排序。
  • 🤖 人工智能工作流程: 机器学习流程按分数对预测结果进行排序,并在排名或评估之前选择最佳结果。

Python 列表排序()

sort() 方法是什么 Python?

sort() 函数 Python 有助于将列表按升序或降序排序。它可以用于对数值列表、元组和字符串列表进行排序。它不会创建新列表,而是修改或排序原始列表。

Sort 方法的语法 Python

排序函数的语法如下:

List.sort(key=…, reverse=…)

排序函数有两个可选参数,分别是:

  • 键:- 用于根据排序标准对功能进行排序。
  • Reverse:– 该函数接受真或假两种值。如果为真,则此自定义函数按降序对列表进行排序。

使用 Sort 方法按升序对列表进行排序 Python

In Python,sort 函数默认按升序对任何列表进行排序。升序排列的列表的最小值位于左侧,而最大值位于右侧。

计费示例:

Python 码:

base_list=["Google","Reliance","Guru99","Content","Syntax"]
base_list.sort()
print("the base list after sorting is",base_list)

输出:

the base list after sorting is ['Content', 'Google', 'Guru99', 'Reliance', 'Syntax']

Code 说明:

  • 上面的列表是随机定义的字符串列表。
  • 排序函数 Python 有助于按升序对随机列表进行排序,左侧是单词长度最短的,右侧是单词长度最长的。

按降序对列表进行排序

sort 函数还允许按降序对列表进行排序。它可以定义为顺序 列表以最高值开始,以最低值结束。

sort 函数的 reverse 参数被赋值为 true,得到按降序排列的列表。

让我们来看下面的例子:

Python 码:

base_list=[100,600,400,8000,50]
base_list.sort()
print("the base list after sorting is",base_list)
# Reverse Order
base_list.sort(reverse=True)
print("the base list after REVERSE sorting is",base_list)

输出:

the base list after sorting is [50, 100, 400, 600, 8000]
the base list after REVERSE sorting is [8000, 600, 400, 100, 50]

注意:确保将单词“True”分配给反向参数以大写“T”开头,以避免任何运行时错误。

使用 Sort 方法对元组列表进行排序 Python

Python 元组 是遵循有序序列的不可变元素的集合。 Python的排序函数可用于使用自定义函数和 lambda 表达式对元组列表进行排序。

自定义函数可以不命名,而是用 lambda 表达式表示。以下是 lambda 表达式的语法:

语法:

Lambda arguments: expression

上述语法相当于下面的python代码:

def name (arguments):
return expression

以下是一个元组和自定义函数的示例,用于说明带有键参数的排序函数如何帮助对元组中的元素进行排序:

Python 码:

base_list = [('Alto', 2020, 500),('MSFT', 2022, 300),('Guru99', 2019, 1070)]
def get_key(base_list):
    return base_list[2]
base_list.sort(key=get_key,reverse=True)
print("The change in base list is as follows",base_list)

输出:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Code 说明:

  • 将 reverse 参数定义为 true,以按降序对元组进行排序。
  • 自定义函数取元组的第二个元素。
  • 这被用作排序函数的键。

让我们看看下面使用 lambda 表达式的例子:

Python 码:

base_list = [('Alto', 2020, 500),
('MSFT', 2022, 300),
('Guru99', 2019, 1070)]
base_list.sort(key=lambda base_list:base_list[2],reverse=True)
print("The change in base list is as follows",base_list)

输出:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

说明:

  • lambda 表达式帮助你将元组的元素从高到低排序,键作为元组的第二个元素。
  • 程序将检查元组的第二个元素的最高值。

使用 Len 作为关键参数对列表项进行排序

Len 是一个内置函数,用于确定项目的长度。确定的长度可用于排序函数中的索引。为此,我们将 Len 赋值给…… Python 排序函数的关键参数。

下列 Python 代码说明了如何将 Len 函数与 sort 函数一起使用。

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len)
print("The sorted list based on length:",base_list)

输出:

The sorted list based on length: ['Alto', 'Java', 'Guru99', 'Python', 'Google']

Code 说明:

使用 Len 对列表项进行排序

  • 元素的长度成为关键参数的索引,以便按升序排列列表。
  • Len 函数估计基列表中每个元素的长度。
  • 它将最短的元素保存在左侧,将最大的元素保存在右侧。
  • 这里,单词 alto 和 java 的长度均为 4,它们在列表中排在第一位,紧随其后的是…… Guru99,其长度为 6。

以下示例说明了排序函数中 reverse 参数的概念:

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len,reverse=True)
print("The sorted list based on length:",base_list)

输出:

The sorted list based on length: ['Guru99', 'Python', 'Google', 'Alto', 'Java']

使用用户定义函数作为关键参数对列表项进行排序

您还可以使用用户自定义函数作为键参数来对列表进行排序。以下是一个示例:

Python Code:

base_list = [{'Example':'Python','year':1991},{'Example':'Alto','year':2014},{'Example':'Guru99', 'year':1995},
{'Example':'Google','year':1985},{'Example':'Apple','year':2007},{'Example':'Emails','year':2010},]
def get_year(element):
    return element['year']
base_list.sort(key=get_year)
print("The base list after sorting using explicit criteria",base_list)

输出:

The base list after sorting using explicit criteria [{'Example': 'Google', 'year': 1985}, {'Example': 'Python', 'year': 1991}, {'Example': 'Guru99', 'year': 1995}, {'Example': 'Apple', 'year': 2007}, {'Example': 'Emails', 'year': 2010}, {'Example': 'Alto', 'year': 2014}]

Code 说明:

  • 创建用户定义函数来返回年份
  • 关键参数以用户定义的函数作为准则。
  • Sort 函数将根据元素“year”的值按升序排列列表。

sort 方法与 sorted 方法的区别 Python

在学习了以上示例之后,直接比较这两种排序工具会很有帮助。在总结它们的区别之前,让我们先了解一下 Sorted 方法的语法。

Python 语法:

sorted (list_name, reverse=…., key=..)

Code 说明:

  • 排序函数将列表按升序或降序排序。
  • 该函数接受三个参数,其中两个参数是可选类型,一个参数是必需类型。
  • 使用 Sorted 方法时需要参数 list_name。
  • Sorted 方法可以将任何类型的可迭代列表作为输入。
  • 关键参数和反向参数是sorted方法下的可选参数 Python.

以下是使用 sort 和 sorted 函数的示例 Python:

Python 码:

#Use of the Sorted method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=sorted(Base_list)
print("the New list using sorted method is",New_list)
#Use of the Sort method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=Base_list.sort()
print("the New list using sort method is",New_list)

输出:

the original list is [11, 10, 9, 8, 7, 6]
the new list using the sorted method is [6, 7, 8, 9, 10, 11]
the original list is [11, 10, 9, 8, 7, 6]
the new list using the sort method is None

Code 说明:

  • 原始列表作为排序函数的必需参数传递。
  • Sorted 方法除了返回原始列表之外,还返回一个新的列表。
  • 由于没有向 sorted 方法传递任何附加参数,因此新列表默认按升序排序。
  • 排序函数不会生成任何新列表。

以下是主要异同点:

排序函数 排序功能
排序函数 Python 是一个内置函数,以 list_name 作为必需参数。 排序函数不将原始列表作为参数。
排序方法返回一个新列表 排序函数不返回新列表
可迭代列表应使用排序函数 排序函数应用于不可迭代列表。
它不会修改原始列表并允许我们保留原始数据。 sort函数修改了原函数,占用的内存空间更小

何时使用 sorted 方法或 sort 方法?

让我们举一个需要对比赛数据进行排序的例子。程序使用号码布和完成比赛所用的时间(以秒为单位)。

Python 码:

from collections import namedtuple
Base = namedtuple('Runner', 'bibnumber duration')
blist = []
blist.append(Base('8567', 1500))
blist.append(Base('5234', 1420))
blist.append(Base('2344', 1600))
blist.append(Base('2342', 1490))
blist.append(Base('23444', 1620))
blist.append(Base('6674', 1906))
print("original list",blist)
blist.sort(key=lambda x: getattr(x, 'duration'))
top_five_result = blist[:5]
print("Results using sort function",top_five_result)
r_blist=sorted(blist,key=lambda x: getattr(x, 'duration'))
top_five_result = r_blist[:5]
print("Results using sorted function",top_five_result)

输出:

original list [Runner(bibnumber='8567', duration=1500), Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='23444', duration=1620), Runner(bibnumber='6674', duration=1906)]

Results using sort function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Results using sorted function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Code 说明:

  • 使用 sort 函数和 sorted 函数对基础列表进行排序。
  • 应用排序函数时,基本列表会丢失。
  • 排序函数不应用于原始数据集。它应该在有原始数据集的副本版本时使用。
  • Sorted 函数保留原始列表。它不会覆盖它。
  • 这提供了更好的选择。 trac可用性和有效的数据管理。

常见问题

将 key=str.lower 传递给 sort() 方法,例如 names.sort(key=str.lower)。每个字符串都以小写形式进行比较,因此 'Apple' 和 'banana' 会按字母顺序排列,而忽略大小写。最终排序后的列表中会保留每个元素的原始大小写。

对全部数字或全部字符串的列表进行排序可以正常工作,但混合使用不相关的类型(例如整数和字符串)会引发 TypeError,因为 Python 无法直接比较。请先将这些值转换为可比较的类型,或者传递一个返回可比较键的键函数​​。

Python 历史上曾使用 Timsort 算法,它是归并排序和插入排序的混合算法。自 3.11 版本起,解释器改用 Powersort 算法,它是 Timsort 的衍生算法,采用了更智能的归并策略。两者都很稳定,最坏情况下的时间复杂度均为 O(n log n)。

是的。sort() 方法是稳定的,因此相等的元素会保持它们原来的相对顺序。这样,您可以分阶段按多个条件排序,先按最不重要的键排序,最后按最重要的键排序。

sort() 方法在最坏情况和平均情况下的时间复杂度均为 O(n log n)。对于大部分已经有序的数据,其时间复杂度接近 O(n),因为底层算法会检测并重用已有的有序序列,而不是重新排序。

传递一个键,用于在比较过程中转换每个元素,例如 `nums.sort(key=int)`。这样,列表将按数值而不是字符排序,因此 '10' 会正确地排在 '9' 之后。存储的元素仍然是字符串;只有比较时才会使用它们的整数值。

排序可以按分数或概率排列预测结果,在排名和推荐系统中选择前 k 个结果,并在数据准备过程中对记录进行排序。机器学习流程经常在评估之前对特征值或模型输出进行排序,因此内置的 sort() 方法是常见的预处理步骤。

是的。GitHub Copilot 和智能 AI 助手可以根据简短的注释生成 sort() 和 sorted() 调用,包括关键函数和 lambda 表达式。它们可以将循环重构为单个 sort 语句,但您仍然应该测试排序结果,并在特殊情况下确认结果。

总结一下这篇文章: