在Python中对列表的列表进行排序

17 投票
3 回答
34993 浏览
提问于 2025-04-16 02:15
c2=[]
row1=[1,22,53]
row2=[14,25,46]
row3=[7,8,9]

c2.append(row2)
c2.append(row1)
c2.append(row3)

c2 现在是:

[[14, 25, 46], [1, 22, 53], [7, 8, 9]]

我该如何对 c2 进行排序,比如说:

for row in c2:

sort on row[2]

结果会是:

[[7,8,9],[14,25,46],[1,22,53]]

3 个回答

3

好的,你想要的例子似乎表明你想根据列表中的最后一个索引来排序,这可以通过下面的方式实现:

sorted_c2 = sorted(c2, lambda l1, l2: l1[-1] - l2[-1])
4
>>> import operator
>>> c2 = [[14, 25, 46], [1, 22, 53], [7, 8, 9]]
>>> c2.sort(key=itemgetter(2))
>>> c2
[[7, 8, 9], [14, 25, 46], [1, 22, 53]]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

27

在调用 sort 方法时,key 参数是一个函数,这个函数有一个输入,用来从每个列表元素中提取出一个用于比较的关键值。 这样我们可以创建一个简单的 lambda 函数,它会返回每一行的最后一个元素,用来进行排序:

c2.sort(key = lambda row: row[2])

一个 lambda 是一个简单的匿名函数。 当你想创建一个简单的、只用一次的函数时,这个功能非常方便。 如果不使用 lambda,相同的代码会是:

def sort_key(row):
    return row[2]

c2.sort(key = sort_key)

如果你想根据多个条目进行排序,只需让 key 函数返回一个元组,里面包含你希望按重要性排序的值。例如:

c2.sort(key = lambda row: (row[2],row[1]))

或者:

c2.sort(key = lambda row: (row[2],row[1],row[0]))

撰写回答