我试图定义一个函数,如果列表中的每个项目都小于2,则返回true,否则返回false。项的类型可以是与列表不同的整数,浮点数,str或sth。我应该检查清单。
def ifeveryitems(lst):
for items in lst:
if isinstance(items,list) and len(items) <= 2:
return True and ifeveryitem(????) # '????' should be the items other than the item that has been searched #
else:
return False
根据您的描述判断,您根本不需要递归调用:
def ifeveryitems(lst):
for items in lst:
if isinstance(items, list) and len(items) > 2:
return False
return True
或者,或者:
def ifeveryitems(lst):
return all(len(items) <= 2 for items in lst if isinstance(items, list))
您可以尝试以下操作:
def ifeveryitems(lst):
return all(map(lambda x: x < 2, lst))
解决了您的问题后,我将一般解释循环与尾递归的概念,因为尾递归通常是一种有用的技术。尽管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:]
)。最终,它要么通过快捷键(当isinstance(lst[0],list) and len(lst[0]) <= 2
为False时)返回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。