python列表按照指定顺序排序

2023-11-17 09:50:46

要按照指定顺序对Python列表进行排序,可以使用`sorted()`函数和`key`参数。`key`参数可以接受一个函数,用于指定排序的依据。

以下是一个示例,展示如何按照指定顺序对列表进行排序:

my_list = ['grape', 'watermelon', 'kiwifruit', 'grape']
order = ['watermelon', 'kiwifruit', 'grape', 'grape']

sorted_list = sorted(my_list, key=lambda x: order.index(x))

print(sorted_list)

输出:

['watermelon', 'kiwifruit', 'grape', 'grape']

在上面的示例中,`my_list`是待排序的列表,`order`是指定的顺序。我们使用`sorted()`函数来对`my_list`进行排序,`key`参数使用了一个匿名函数`lambda x: order.index(x)`。这个匿名函数接受列表中的每个元素作为输入,并返回它在`order`列表中的索引。`sorted()`函数根据这个索引进行排序,从而按照`order`列表中的顺序对列表进行排序。

注意,如果列表中存在不在`order`列表中的元素,它们将被放置在结果列表的末尾。如果希望保留在`order`列表中没有出现的元素的原始顺序,可以使用`default`参数来指定一个默认值。

my_list = ['grape', 'watermelon', 'kiwifruit', 'grape', 'kiwi']
order = ['watermelon', 'kiwifruit', 'grape', 'grape']

sorted_list = sorted(my_list, key=lambda x: order.index(x) if x in order else len(order))

print(sorted_list)

输出:

['watermelon', 'kiwifruit', 'grape', 'grape', 'kiwi']

在上面的示例中,添加了一个新的元素`'kiwi'`,它不在`order`列表中。通过在`key`参数中使用`order.index(x) if x in order else len(order)`,我们将不在`order`列表中的元素的排序依据设为`len(order)`,即`order`列表的长度。这样,不在`order`列表中的元素将被放置在结果列表的末尾,而且它们的顺序保持不变。