【问题标题】:How to create a recursive separator?如何创建递归分隔符?
【发布时间】:2021-12-31 06:23:57
【问题描述】:

我正在尝试学习递归,并在两个列表中分离奇数和偶数值并将它们合并到另一个列表,如下所示:

代码:

def separateNumbers(L):
    evenList = []
    oddList = []
    main = []
    if len(L)==0:
        return L
    if L[0] % 2 == 0:
        evenList.append(L[0])
        separateNumbers(L[1:])
    if L[0] % 2 == 1:
        oddList.append(L[0])
        separateNumbers(L[1:])
    main.append(evenList)
    main.append(oddList)
    return main

inputList = [1,2,3,4,5,6,7,8,9,10]
L = separateNumbers(inputList)
print(L)

输入:

L = [1,2,3,4,5,6]

输出:

[[1,3,5], [2,4,6]]

每次调用递归函数时,偶数数组和奇数数组都会重置,我该如何解决这个问题?

用内部函数试过:

def separateNumbers(L):
    evenList = []
    oddList = []
    main = []
    def inner(L):
        if len(L)==0:
            return L
        if L[0] % 2 == 0:
            evenList.append(L[0])
            inner(L[1:])
        if L[0] % 2 == 1:
            oddList.append(L[0])
            inner(L[1:])
        main.append(evenList)
        main.append(oddList)
        return main
    a = inner(L)
    return a

输出:

[[2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 
10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]  

【问题讨论】:

  • 做一个嵌套函数来做实际的递归
  • 我尝试了内部函数但没有得到答案,我正在显示原始帖子中的更改。关于递归的一些我不明白的事情
  • Inner 永远不应该调用main.append(oddList)。如果您想了解您的代码,请手动跟踪它
  • 我通常会调试和跟踪我的代码,但即使使用递归也无助于理解

标签: python list recursion


【解决方案1】:

您不需要嵌套函数。试试:

def separate_numbers(lst):
    if not lst: # empty list
        return [], []
    odd, even = separate_numbers(lst[1:]) # recursion call
    if lst[0] % 2: # if the first item is odd
        return [lst[0], *odd], even
    else: # if even
        return odd, [lst[0], *even]

lst = [1,2,3,4,5,6,7,8,9,10]
print(separate_numbers(lst)) # ([1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

该函数使用输入列表的尾部调用自身,接收两个列表:odd 用于奇数,even 用于偶数。然后,在将头元素 lst[0] 附加到其中一个列表之后,它会返回这些列表。

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多