解决了您的问题后,我将一般解释循环与尾递归的概念,因为尾递归通常是一种有用的技术。
尽管 Python 中的循环和列表理解意味着您不太可能需要尾递归,但最好有它的想法。
递归调用函数的技术称为尾递归。使用尾递归和循环可以实现相同的目的,但您不需要两者。
要执行您想要的操作,您可以使用循环:
def ifeveryitems(lst):
for items in lst:
if not isinstance(items,list) or len(items) > 2:
return False
return True
或尾递归:
def ifeveryitems(lst):
if isinstance(items,list) and len(lst)==0:
return True
return isinstance(lst[0],list) and len(lst[0]) <= 2 and ifeveryitems(lst[1:])
此函数检查第一项lst
是否为列表且长度为 2 或更短,然后lst[1:]
使用函数本身检查列表的其余部分 ( )。最终,它要么通过快捷方式返回 False(何时isinstance(lst[0],list) and len(lst[0]) <= 2
为 False),要么达到整个列表用尽的基本情况,当它返回 True 时。
再举一个例子:实现len(L)
自己。
假设L
总是一个列表,您可以len
使用循环来实现:
def len(L):
i = 0
for item in L:
i += 1
return i
(注意:使用这样的循环也称为累加)
或尾递归。
def len(L):
if L==[]:
return 0
return 1 + len(l[1:])
它删除列表的第一项,并将列表其余部分的长度加 1。最终,它会到达 L 耗尽并减少到空列表的点,在这种情况下它只会返回 0。