Python中列表的排序

0 投票
5 回答
1325 浏览
提问于 2025-04-17 06:53

给定一个列表:lst = [['John',3],['Blake',4],['Ted',3]]

结果应该是:lst = [['John',3],['Ted',3],['Blake',4]]

我想找一种方法来对这个包含列表的列表进行排序,先按数字排序,然后再按字母排序,而且不想用“itemgetter”这种写法。

5 个回答

2

我觉得这个问题之前可能有人问过,具体可以参考这个链接:

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

这里是Dave Webb给出的解释:

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]))
2

你可以使用内置的 sorted 函数中的 key 参数。

在这个 key 参数中,你可以传入一个带有一个参数的函数,这个函数会返回一个值,用来进行排序,而不是直接根据列表中的元素来排序。

def my_func(elem):
    # return a tuple (second element, first element)
    return (elem[1], elem[0])

>>> lst = [['John',3],['Blake',4],['Ted',3]]
>>> sorted(lst, key=my_func)
[['John', 3], ['Ted', 3], ['Blake', 4]]

或者可以更简洁一些:

>>> sorted(lst, key=lambda x: (x[1],x[0]))
[['John', 3], ['Ted', 3], ['Blake', 4]]

无论哪种方式,你都是先按数字排序,然后再按字母排序。

5

既然你坚持要知道:

lst.sort(key=lambda x: x[::-1])

撰写回答