追加列表中的Python递归

2024-06-16 13:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想递归地追加到一个列表中,但是我不能想出一个有效的函数。函数接受两个参数timesdatatimes应该是追加数据的次数。

这是我目前的代码:

def replicate_recur(times, data):
    result2 = []
    if times == 0:
        result2.append(data)
    else:
        result2.append(data)
        replicate_recur(times - 1, data)
    return result2

Tags: 数据函数代码列表data参数ifdef
3条回答

您可以使用xrange进行此操作,除非是编码测试,否则没有必要使用递归。

def replicate(times, data):
    result2 = []
    for i in xrange(times):
        result2.append(data)
    return result2

同样的函数可以用如下递归方式编写:

def replicate_recur(times, data, listTest=None):
    # If a list has not been passed as argument create an empty one
    if(listTest == None):
        listTest = []
    # Return the list if we need to replicate 0 more times
    if times == 0:
        return listTest
    # If we reach here at least we have to replicate once
    listTest.append(data)
    # Recursive call to replicate more times, if needed and return the result
    replicate_recur(times-1, data, listTest)
    return listTest

可以在每个递归调用中使用要附加到的中间列表。这样可以避免当前遇到的这些重新定义问题:

def replicate_recur(times, data, result=None):
    if result is None:  # create a new result if no intermediate was given
        result = []
    if times == 1:
        result.append(data)
    else:
        result.append(data)
        replicate_recur(times - 1, data, result)  # also pass in the "result"
    return result

调用时:

>>> replicate_recur(4, 2)
[2, 2, 2, 2]

要使代码正常工作,您需要在当前执行中使用下一个递归调用的输出extend列表。此外,递归的最低深度应该由times = 1定义:

def replicate_recur(times, data):
    result2 = []
    if times == 1:
        result2.append(data)
    else:
        result2.append(data)
        result2.extend(replicate_recur(times - 1, data))
    return result2

另一方面,您可以简单地复制列表:

def replicate(times, data):
    return [data]*times

相关问题 更多 >