按函数排序Python列表

37 投票
2 回答
59209 浏览
提问于 2025-04-17 00:01

我有一个函数,它接收一个对象作为参数,然后返回一个数字。我想用这个数字来对我的列表进行排序。

如果我要遍历这个列表,我会这样做:

sorted_list = []
for object in my_list_of_objects:
    i = my_number_giving_function(object)
    sorted_list.insert(i, object)

我该如何使用 sorted 来得到同样的结果呢?这是我想到的,但我不知道在 '???' 里该填什么。

sorted_list = sorted(my_list_of_objects, key=my_number_giving_function(???))

2 个回答

1

如果你的排序函数需要一个额外的参数,那么使用lambda函数会很有用;否则,直接用函数名就可以了。举个例子,如果你想按照日期对一串字符串(这些字符串是日期时间的表示)进行排序,那么你就需要传入日期的格式。

from datetime import datetime
sorted_list = sorted(my_list, key=lambda x: datetime.strptime(x, '%m/%d/%Y')) # sorted new list

# or call sort() on the list for inplace sorting
my_list.sort(key=lambda x: datetime.strptime(x, '%m/%d/%Y'))                  # old list is sorted
29
sort(my_list_of_objects, key=my_number_giving_function)

对于排序也是一样,可以查看Python的排序指南

撰写回答