我在python中具有此功能。当两个列表的长度相同时,它的作用类似于map(func,l1,l2)。它将功能应用于list1和list2中的所有项目。
def map2(func, l1, l2):
result = []
if len(l1) > 0:
for i in range(len(l1)):
result.append(func(l1[i], l2[i]))
return result
如何将其重写为递归程序?
谢谢
答案 0 :(得分:0)
使用列表的长度终止递归。
在此示例实现中,如果list
中任何一个的长度为0,我们都将其全部映射,或者它是一个空的list
,因此我们终止了递归。同样值得注意的是l1[1:]
是我们尚未映射的list
的一部分。
def map3(func, l1, l2):
if (len(l1) == 0 or len(l2) == 0):
return []
return [func(l1[0], l2[0])] + map3(func, l1[1:], l2[1:])
让我们测试一下:
测试功能:
def func(a, b):
return a * b
测试list
:
l1 = [1, 2, 3]
l2 = [4, 5, 6]
运行它:
print(map3(func, l1, l2))
输出:
[4, 10, 18]