【问题标题】:Sorting using helper function - can the helper function return more than one variable?使用辅助函数排序 - 辅助函数可以返回多个变量吗?
【发布时间】:2019-08-02 22:02:49
【问题描述】:

我有两个列表:numbers 和 group。我使用辅助函数对列表进行排序。我想知道的是,是否可以从函数中返回另一个变量,例如 'sorted'= 'True'?

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = [2, 3, 5, 7]

def sort_priority(values, group):
    sorted = 'False'
    def helper(x):
        if x in group:
            sorted = 'True' 
            return (0, x)
        else:
            return (1, x)

    values.sort(key=helper)
    return sorted

【问题讨论】:

  • 我不清楚你所说的“另一个变量”是什么意思。你是说另一种类型吗?你的意思是返回多个变量?
  • 如果满足'if'条件,我需要返回true。即,根据辅助函数排序

标签: python sorting return


【解决方案1】:

@ekhumoro 的答案可能就是你想要的。

另一种方式,利用 Python 中的这一事实,
函数是对象/一等公民:

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
group = [2, 3, 5, 7]

def sort_priority(values, group):
    def helper(x):
        if x in group:
            helper.wasSorted = 'True'
            return (0, x)
        else:
            return (1, x)
    helper.wasSorted = 'False'

    values.sort(key=helper)
    return helper.wasSorted

print(sort_priority(numbers, group))

另外,'sorted' 是内置函数的名称,
这可能会导致一些混乱
(因此将其更改为“wasSorted”)。

【讨论】:

    【解决方案2】:

    如果您使用的是 Python 3,则可以使用 nonlocal 语句实现此目的:

    def sort_priority(values, group):
        sorted = 'False'
        def helper(x):
            nonlocal sorted
            if x in group:
                sorted = 'True'
                return (0, x)
            else:
                return (1, x)    
        values.sort(key=helper)
        return sorted
    

    这允许外部范围内的 sorted 变量被辅助函数的内部范围修改 - 因此 sort_priority 将返回 "True"。

    如果您使用的是 Python 2,nonlocal 语句不可用,但可以通过以下方式实现类似的功能:

    def sort_priority(values, group):
        nonlocals = {'sorted': 'False'}
        def helper(x):
            if x in group:
                nonlocals['sorted'] = 'True'
                return (0, x)
            else:
                return (1, x)    
        values.sort(key=helper)
        return nonlocals['sorted']
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2017-03-27
      • 1970-01-01
      • 2011-08-24
      • 2015-03-08
      • 2014-01-23
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多