首页 > 解决方案 > 在闭包函数的帮助下,python中的排序优先级

问题描述

我读了一本 Python 教科书,它具有以下与排序结合使用的闭包函数。这个排序函数应该首先对属于特殊group集合的数字进行优先排序,然后对剩余的数字进行排序:

def sort_priority(values, group):
    def helper(x):
        if x in group:
            return (0, x)
        return (1, x)
    values.sort(key=helper)

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = {2, 3, 5, 7}
sort_priority(numbers, group)
print(numbers)

输出:

[2, 3, 5, 7, 1, 4, 6, 8]
  1. 被传递的x参数的实际值在哪里?helper(x)
  2. 我知道Python首先比较元组中的0到0索引,然后是1到1索引等;但不太确定在这种情况下如何比较使用返回的元组。

标签: python

解决方案


sort() 中的关键参数需要一个函数,并将该函数应用于每个正在排序的列表元素。在您的示例中,值的每个元素都传递给 helper(),然后检查该元素是否在组中。然后排序比较元组列表,第一个元素为 0 的元组总是排在第一个元素为 1 的元组之前。

来源: https ://wiki.python.org/moin/HowTo/Sorting#Key_Functions


推荐阅读