我想以递归方式附加到列表中,但我无法想出一个有效的函数。该函数有两个参数times
和data
。 times
应该是附加数据的次数。
到目前为止,这是我的代码:
def replicate_recur(times, data):
result2 = []
if times == 0:
result2.append(data)
else:
result2.append(data)
replicate_recur(times - 1, data)
return result2
答案 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
会做你想要实现的目标。