如何按给定索引排序列表/元组的列表/元组
我有一些数据,可能是一个列表里面包含多个列表,或者是一个列表里面包含多个元组,像这样:
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