如何按给定索引排序列表/元组的列表/元组

911 投票
11 回答
952097 浏览
提问于 2025-04-16 00:27

我有一些数据,可能是一个列表里面包含多个列表,或者是一个列表里面包含多个元组,像这样:

data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]

我想根据每个子集的第二个元素来排序。也就是说,我想按照2、5、8来排序,其中2来自(1,2,3)5来自(4,5,6)。请问,通常应该怎么做呢?我应该在我的列表中存储元组还是列表呢?

11 个回答

91

如果你想根据多个标准来排序,比如说根据一个tuple中的第二个和第三个元素来排序,可以这样做:

data = [(1,2,3),(1,2,1),(1,1,4)]

然后你可以定义一个lambda函数,这个函数会返回一个tuple,用来描述排序的优先级,比如:

sorted(data, key=lambda tup: (tup[1],tup[2]) )
[(1, 1, 4), (1, 2, 1), (1, 2, 3)]
309
from operator import itemgetter
data.sort(key=itemgetter(1))

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

1497
sorted_by_second = sorted(data, key=lambda tup: tup[1])

或者:

data.sort(key=lambda tup: tup[1])  # sorts in place

默认的排序方式是从小到大。如果想要从大到小排序,可以使用这个选项 reverse=True

sorted_by_second = sorted(data, key=lambda tup: tup[1], reverse=True)

或者:

data.sort(key=lambda tup: tup[1], reverse=True)  # sorts in place

撰写回答