目录
Sort a list of tuples by the second element in Python
在 Python 中按第二个元素对元组列表进行排序
使用函数key
的参数sorted()
按第二个元素对元组列表进行排序。
该函数将返回一个新列表,按第二个元组元素排序。
# ✅ sort a list of tuples by second element (ascending order) list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1] ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]
如果您需要按第二个元素降序对元组列表进行排序,请改用以下代码示例。
# ✅ sort a list of tuples by second element (descending order) list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1], reverse=True ) print(sorted_list) # 👉️ [(1, 50), (1, 30), (1, 20)]
sorted函数接受一个可迭代对象,并从可迭代对象中的项目返回一个新的排序列表。
该函数采用可选key
参数,可用于按不同标准进行排序。
list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1] ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]
0
1
参数key
可以设置为确定排序标准的函数。
该示例按每个元组中的第二个元素对元组列表进行排序。
按第二个元素降序排列元组列表
如果您需要按降序(从大到小)的第二个元素对元组列表进行排序,请reverse
在true
调用
sorted()
.
list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=lambda t: t[1], reverse=True ) print(sorted_list) # 👉️ [(1, 50), (1, 30), (1, 20)]
reverse
参数设置为True
,则元素将按照每次比较都反转的方式进行排序。使用 itemgetter() 按第二个元素对元组列表进行排序
您还可以使用该operator.itemgetter()
方法来指定要作为排序依据的索引。
from operator import itemgetter list_of_tuples = [(1, 50), (1, 20), (1, 30)] sorted_list = sorted( list_of_tuples, key=itemgetter(1) ) print(sorted_list) # 👉️ [(1, 20), (1, 30), (1, 50)]
operator.itemgetter
方法返回一个可调用对象,该对象获取指定索引处的项目。
例如,x = itemgetter(1)
然后调用x(my_tuple)
,返回
my_tuple[1]
。
在 Python 中按多个元素对元组列表进行排序
要按多个元素对元组列表进行排序:
- 将列表传递给
sorted()
函数。 - 使用
key
参数选择每个元组中特定索引处的元素。 - 该
sorted()
函数将按指定元素对元组列表进行排序。
list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] # ✅ sort a list of tuples by second and third elements sorted_list = sorted( list_of_tuples, key=lambda t: (t[1], t[2]) ) print(sorted_list) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]
sorted函数接受一个可迭代对象,并从可迭代对象中的项目返回一个新的排序列表。
key
参数,可用于按不同标准进行排序。参数key
可以设置为确定排序标准的函数。
1
该示例按索引处和2
每个元组中的元素对元组列表进行排序。
由于第三个元组中的第二个项目是最低的,它被移到前面。
3
),所以第三个项目进行比较并且因为50
小于100
,它排在第二位。按多个元素降序排列元组列表
如果您需要按降序对多个元素的元组列表进行排序,请在函数调用中将reverse
参数设置为。True
sorted()
list_of_tuples = [(1, 3, 100), (3, 2, 75), (2, 3, 50)] sorted_list = sorted( list_of_tuples, key=lambda t: (t[1], t[2]), reverse=True ) print(sorted_list) # 👉️ [(1, 3, 100), (2, 3, 50), (3, 2, 75)]
reverse
参数设置为True
,则元素将按照每次比较都反转的方式进行排序。元组中的 2 个具有3
作为第二个元素,并且由于我们将reverse
参数设置为True
,具有更大的第三个元素的元组被移到前面。
列表中的最后一个元组是第二个元素最低的元组。
使用 operator.itemgetter 按多个元素对元组列表进行排序
您还可以使用该operator.itemgetter()
方法来指定要作为排序依据的索引。
from operator import itemgetter list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] # ✅ sort list of tuples by second and third elements sorted_list = sorted( list_of_tuples, key=itemgetter(1, 2), ) print(sorted_list) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]
The
operator.itemgetter
method returns a callable object that fetches the item at the specified index.
For example, x = itemgetter(1)
and then calling x(my_tuple)
, returns
my_tuple[1]
.
Using the itemgetter
method is faster than using a lambda function, but it is
also a bit more implicit.
# Sort a list of tuples by multiple elements using list.sort()
Alternatively, you can use the list.sort()
method to sort the list of tuples
by multiple elements in place.
from operator import itemgetter list_of_tuples = [(1, 3, 100), (2, 3, 50), (3, 2, 75)] list_of_tuples.sort(key=itemgetter(1, 2)) print(list_of_tuples) # 👉️ [(3, 2, 75), (2, 3, 50), (1, 3, 100)]
The list.sort
method sorts the list in place and it uses only <
comparisons between items.
The method takes the following 2 keyword-only arguments:
Name | Description |
---|---|
key | a function that takes 1 argument and is used to extract a comparison key from each list element |
reverse | 一个布尔值,指示是否应反转每个比较 |
请注意,该list.sort
方法会就地改变列表并
返回 None。
sorted()
如果您需要一个新的列表实例而不是就地突变,则可以使用该函数。
我还写了一篇关于
如何获取排序列表的索引的文章。