【发布时间】:2020-04-08 05:10:58
【问题描述】:
我需要创建一个函数,它接受两个列表作为参数,并在 python 3.x 中使用递归返回两个列表中元素对的列表。
输入 create_all_pairs([1,2], [3,4]) 应该给我:
[(1,3), (1,4), (2,3), (2,4)].
我用 3 种不同的方式创建了这个函数:使用 for 循环、使用 while 循环和使用列表推导。
def create_all_pairs_for(xs, ys):
lst = []
for x in xs:
for y in ys:
lst.append((x,y))
return lst
def create_all_pairs_while(xs, ys):
lst = []
xscount = 0
yscount = 0
while xscount < len(xs):
while yscount < len(ys):
lst.append((xs[xscount], ys[yscount]))
yscount += 1
xscount += 1
yscount = 0
return lst
def create_all_pairs_listcomp(xs, ys):
lst = [(a,b) for a in xs for b in ys]
return lst
如何使用递归编写此函数?这是我到目前为止所得到的,但我完全迷失了。
def create_all_pairs_rec(xs, ys):
if not xs:
return []
else:
return list(map(create_all_pairs_rec(xs, ys)), ys)
【问题讨论】:
-
每个列表中的一个元素你会怎么做?
-
您缺少递归步骤。您使用完全相同的参数一次又一次地调用递归函数。递归的想法是有一个减少步骤,这将导致你停止条件
-
仅供参考,这已经由
itertools.product实现。
标签: python list recursion tuples