首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建递归分隔符?

如何创建递归分隔符?
EN

Stack Overflow用户
提问于 2021-11-21 06:47:42
回答 1查看 47关注 0票数 0

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

代码:

代码语言:javascript
复制
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)

输入:

代码语言:javascript
复制
L = [1,2,3,4,5,6]

输出:

代码语言:javascript
复制
[[1,3,5], [2,4,6]]

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

使用内部函数尝试:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[[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]]  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-21 19:54:21

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

代码语言:javascript
复制
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表示偶数。然后,在将head元素lst[0]附加到其中一个列表之后,它返回这些列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70052437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档