附加列表中的Python递归

时间:2017-02-22 09:54:25

标签: python list recursion

我想以递归方式附加到列表中,但我无法想出一个有效的函数。该函数有两个参数timesdatatimes应该是附加数据的次数。

到目前为止,这是我的代码:

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

5 个答案:

答案 0 :(得分:3)

您可以在每个递归调用中使用中间列表追加。这避免了您目前遇到的这些重新定义问题:

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]

答案 1 :(得分: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

答案 2 :(得分:1)

你可以使用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

答案 3 :(得分:0)

因为您每次都重新定义结果2。将result2保留在函数之外,它应该可以工作。

如果数据是列表或只是执行

,您也可以考虑执行数据*次复制
(result2.append(data))*times

答案 4 :(得分:0)

在递归中,每次调用replicate_recur时,都会在新名称空间中创建一个新的result2。

[data] * times

会做你想要实现的目标。