您是否对 Python 中元组列表的排序感到困惑?想知道如何高效地对它们进行排序?本介绍将涵盖掌握此类排序所需的所有内容。
列表和元组是 Python 中必不可少的数据结构。在某些情况下,您可能需要对元组列表进行排序。这篇文章将教您如何使用 sorted() 函数和 sort() 方法以及两者之间的区别。您将学习如何在 Python 中对元组进行排序,并了解诸如 key 和 reverse 之类的可选参数如何使 Python 的排序功能更加灵活。
如果您刚开始学习 Python 编程语言, LearnPython 是开启您旅程的简单方法。如果您不熟悉 Python 方法,我们建议您查看 有关 Python 内置算法的 Python 轨迹 。另一方面,如果您有一些 Python 知识并想提高您的编码技能,我们推荐 这门有关 Python 数据结构的课程 .
现在,让我们深入了解 Python 中元组列表排序的基础知识。
初始化列表和元组
首先,什么是列表?如果你是初学者,很容易将列表与数组混淆。然而, 列表和数组是根本不同的数据结构 。数组是固定长度的数据结构,而 列表是可变长度的数据结构 ,可以调整大小。
在 Python 中, 列表是可变的 ,这意味着它们可以被修改。它们可以保存任何类型的数据,包括字符串、元组和集合。(查看本文以 了解有关列表、元组和集合之间的区别的更多信息 。)在本文中,我们将仅使用元组列表。
有两种方法可以初始化空列表。第一种方法是指定一组方括号,其中不包含任何组件值;这将声明一个没有值的列表。此语法的示例如下:
# Method 1
lst = []
我们可以在方括号之间添加一些默认值。Python 列表允许我们拥有任意数量的不同类型的项目:
jobs = ['Software Engineer','Data Analyst', 15, True]
在上面的例子中,我们声明了具有四个初始值的列表对象 jobs:
‘Software Engineer’
和
‘Data Analyst’
(存储为字符串)、
15
(整数)和布尔值
True
.
在 Python 中初始化空列表的另一种方法是使用
list()
构造函数的实际
list()
示例
# Method 2
lst = list()
构造
list()
函数接受一个名为 的可选参数
iterable
。如果没有参数传递给列表构造函数,则构造函数返回一个空列表。如果传递
iterable
了 ,则构造函数返回一个可迭代项列表。
两种方法都会产生相同的结果:一个空列表。没有关于何时应使用这两种方法的指导原则。由于它更简洁,因此
[]
通常首选空白方括号方法。
现在,让我们了解 Python 中的元组是什么。
元组与列表类似,是具有 零个或多个条目的有序序列的 。元组和列表之间的主要区别在于 元组不能被修改 (它们是不可变的);而列表是可变的,如前所述。
使用逗号分隔的值序列来初始化带有值的元组。初始化空元组的方法有两种,就像创建列表的方法有两种一样。如您所见,这些初始化方法非常相似:
# Method 1
tup = ()
# Method 2
tup = tuple()
重要的是要记住,如果您希望生成只有一个值的元组,则需要在项目后面加上一个逗号:
# Tuple with 1 element
tup = (1, )
理解 sorted() 函数
现在让我们看一下 Python 中的排序。
使用 sorted() 可以轻松对 Python 中的列表进行排序。sorted() 函数返回按升序或降序排序的元素列表。此函数的语法为:
sorted(list, key=..., reverse=...)
请注意
key
和
reverse
是两个可选参数:
-
reverse
:如果设置为“True”,排序后的列表将会反转或者按降序排列。 -
key
:充当一种比较键的函数。
理解 sort() 方法
该
sort()
方法按升序(默认)或降序对列表项进行排序。
该方法的语法
sort()
是:
list.sort(key=..., reverse=...)
默认情况下,
reverse
参数设置为
False
和
sort()
的基本区别在于,
sorted()
函数
sort()
对列表进行就地排序,即它修改列表本身并返回 None 值。该
sorted()
函数创建原始列表的副本,对其进行排序,并返回这个新列表,原始列表保持不变。
现在让我们深入研究 Python 中的元组列表排序。
函数 sorted() 对元组列表进行排序
让我们看一个例子来了解如何在 Python 中对元组进行排序。考虑以下元组列表:
sample = [(2, 4, 3), (3, 5, 7), (1, 0, 1)]
现在,让我们应用该
sorted()
函数:
print(sorted(sample))
# Output: [(1, 0, 1), (2, 4, 3), (3, 5, 7)]
如您所见,列表中元组的顺序已经改变。
该
sorted()
方法默认使用每个元组中的第一个项对元组进行排序。因此,排序列表的第一个元组以 0 开头,第二个以 2 开头,第三个以 3 开头。
让我们看看如果每个元组的第一个元素相同会发生什么:
sample = [(1, 4, 3), (1, 5, 7), (1, 0, 1)]
print(sorted(sample))
# Output: [(1, 0, 1), (1, 4, 3), (1, 5, 7)]
第二个元素是该函数使用的下一个排序标准
sorted()
。
如果列表中的所有元组的第二个元素都相同,则元组将根据第三个元素进行排序。如果第一、第二和第三个元素相同,则使用第四个元素,依此类推。
方法 sort() 对元组列表进行排序
该
sort()
方法还可用于对 Python 中的元组进行排序。从元组的初始列表开始:
sample = [(2, 4, 3), (3, 5, 7), (1, 0, 1)]
sample.sort()
print(sample) # Output: [(1, 0, 1), (2, 4, 3), (3, 5, 7)]
还是 ,
s输出都是相同的t()
or
sorted()
。但是,
sort()
会更改对象本身,而
sorted()
返回列表的排序副本。
按元组的第二个元素对列表进行排序
如果您特别想按给定元素对元组列表进行排序,则可以使用该
sort()
方法并指定一个
lambda
函数作为键。不幸的是,Python 不允许您直接指定排序元素的索引。相反,必须在参数内部定义一个函数
key
,这有助于
sort()
方法识别要选择哪个索引。lambda 函数允许您在方法中指定自定义比较器函数
sort()
。
例如:
sample = [('Jack', 76), ('Beneth', 78), ('Cirus', 77), ('Faiz', 79)]
sample.sort(key=lambda a: a[1])
print(sample)
编写上述代码(指示 Python 按第二个元素对元组列表进行排序)后,输出将显示如下内容:
# Output: [(âJackâ, 76), (âCirusâ, 77), (âBenethâ, 78), (âFaizâ, 79)]
Python 还允许你按字母顺序对列表进行排序,但这超出了本文的讨论范围。不过,我们建议你阅读这篇文章,了解 有关按字母顺序对列表进行排序的更多信息 .
按相反顺序对元组列表进行排序
Python 允许您指定列表的排序顺序。因此,我们可以简单地使用该
sort()
方法对列表进行排序。首先,我们将获取一个未排序的元组列表,然后调用该
sort()
作为参数
sort()
,该
reverse=True
方法将把顺序从增加(升序)更改为减少(降序)
让我们通过一个例子来了解如何使用反向参数按降序对列表进行排序:
sample = [(1, 0, 0), (4, 1, 2), (4, 2, 5), (1, 2, 1)]
sample.sort(reverse = True)
print(sample)
# Output : [(4, 2, 5), (4, 1, 2), (1, 2, 1), (1, 0, 0)]
我们还可以根据第二个元素以相反的顺序对元组列表进行排序:
sample = [('f', 90), ('g', 84), ('d', 92), ('a', 96)]
sample.sort(key = lambda i:i[1], reverse = True)
print(sample)
# Output : [('a', 96), ('d', 92), ('f', 90), ('g', 84)]
使用 不带 函数的 lambda sorted()
在上例中,我们将一个
lambda
函数传递给方法的可选参数键
sort()
。
lambda
是一个函数,所以我们应该能够将一个普通函数传递给参数
key
函数
lambda
的内联功能
让我们定义一个名为的函数
second_item()
,它以元组作为参数并返回元组的第二项。
def second_item(data):
return data[1]
现在我们将调用该
sorted()
函数并将
second_item
我们之前定义的函数传递给关键参数:
sample = [(1, 7, 3), (4, 9, 6), (7, 3, 9)]
sample.sort(key = select_item)
print(sample)
# Output : [(7, 3, 9), (1, 7, 3), (4, 9, 6)]
与上一节的结果对比,我们的结果确实是正确的。访问本文深入 了解自定义 Python 排序函数 .
对元组列表进行排序 itemgetter
使用
lambda
或将自定义函数传递到 key 参数的另一种方法是使用
itemgetter()
Python 运算符模块中的函数。在应用该函数之前,让我们看看它的工作原理:
from operator import itemgetter
print(itemgetter(1)((2, 5, 3)))
# Output : 5
该
itemgetter()
函数根据传递给它的索引(在本例中为 1)返回项目。现在让我们使用该
itemgetter()
函数对元组列表进行排序:
sample = [(1, 7, 3), (4, 9, 6), (7, 3, 9)]
print(sorted(sample, key=itemgetter(1)))
# Output : [(7, 3, 9), (1, 7, 3), (4, 9, 6)]
与我们在前面的例子中看到的方式相同,每个元组的第二个成员用于对元组列表进行排序
使用两个元素对元组列表进行排序
到目前为止,我们已经了解了如何指定单个排序元素。在 Python 中,当您想要对元组进行排序时,您还可以指定两个或多个元素用于比较。
我们仍将使用可选的 key 参数以及
lambda
函数。假设我们想按每个元组的第二个和第三个元素对列表进行排序。
,我们可以使用 a
lambda
返回一个由两个值组成的元组,这两个值定义用于排序的元素的位置。
sample = [(2, 4, 7), (3, 0, 1), (3, 0, 0)]
print(sorted(sample, key=lambda x: (x[1], x[2])))
# Output : [(3, 0, 0), (3, 0, 1), (2, 4, 7)]
列表中的元组按第二个元素排序,然后按第三个元素排序。如果我们反转 lambda 中定义的元素顺序,元素将按第二个元素排序,然后按第三个元素排序。
在 Python 中,对元组列表进行排序很容易
对元组列表进行排序似乎很有挑战性,但在 Python 中却恰恰相反。Python 提供了对元组列表进行排序所需的一切,而无需编写自己的排序函数。只需定义计算排序值的关键函数即可。您已经成功学习了 Python 中的排序 - 具体来说,使用几种不同的方法对 Python 中的元组列表进行排序。
发表评论 取消回复