Python中的每项长度
我试图定义一个函数,如果列表中的每个项都小于2,则返回true,否则返回false。项目的类型可以是整数、浮点、str或与列表不同的其他类型。我应该查一下名单Python中的每项长度,python,search,Python,Search,我试图定义一个函数,如果列表中的每个项都小于2,则返回true,否则返回false。项目的类型可以是整数、浮点、str或与列表不同的其他类型。我应该查一下名单 def ifeveryitems(lst): for items in lst: if isinstance(items,list) and len(items) <= 2: return True and ifeveryitem(????) # '????' should be th
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):
对于lst中的项目:
如果根据您的描述判断isinstance(items,list)和len(items),则根本不需要递归调用:
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):
returnall(len(items)根据您的描述判断,您根本不需要递归调用:
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):
返回所有(len(items)您可以尝试以下操作:
def ifeveryitems(lst):
return all(map(lambda x: x < 2, lst))
def ifeveryitems(lst):
返回全部(映射(λx:x<2,lst))
您可以尝试以下方法:
def ifeveryitems(lst):
return all(map(lambda x: x < 2, lst))
def ifeveryitems(lst):
返回全部(映射(λ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:])
(注意:使用这样的循环也称为累加)
或尾部递归
def len(L):
if L==[]:
return 0
return 1 + len(l[1:])
它删除列表的第一项,并将1添加到列表其余部分的长度中。最终,它将到达L耗尽的点,并减少为空列表,在这种情况下,它将只返回0。解决您的问题后,我将解释循环与尾部递归的一般概念,就像尾部递归一样通常是一种有用的技术。
虽然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:])
(注意:使用这样的循环也称为累加)
或尾部递归
def len(L):
if L==[]:
return 0
return 1 + len(l[1:])
它删除列表中的第一项,并将1添加到列表其余部分的长度中。最终,它将到达L耗尽的点,并减少为空列表,在这种情况下,它将返回0。非常感谢!这正是我正在搜索的!all(len(items)非常感谢!这正是我要搜索的!all(len(items)问题是“我试图定义一个函数,如果列表中的每个项都小于2,则返回true,否则返回false。”我认为此解决方案满足该要求,尽管我可能误解了它的意思。如果“小于2”意味着“是一个少于两个元素的列表”啊,对不起,我不小心把代码和问题结合了起来:p问题是“我试图定义一个函数,如果列表中的每个项都少于2,则返回true,否则返回false。“我认为此解决方案满足该要求,尽管我可能误解了其含义。如果“小于2”表示“是一个包含少于两个元素的列表”,则此解决方案不起作用”啊,对不起,我无意中将代码与问题结合起来:PPython没有尾部调用消除,因此尾部递归解决方案很少有用。您忘记了ifeveryitems()
中的return
。您的len()
由于1+
而不是尾部递归,请尝试以下操作:size=lambda L,total=0:size(L[1:],total+1)如果L else total
。请查看以了解为什么使用return 1+len()
的len()
不是尾部递归的。len()
调用不在尾部,add
操作符位于尾部位置:return add(1,len())
,将其与size()函数进行比较(您可以将其重写为多行def
以区别于len()
explicit)Python没有尾部调用消除,因此尾部递归解决方案很少有用。您忘记了ifeveryitems()
中的return
。您的len()由于1+
的原因,
不是尾部递归的,请尝试以下操作:size=lambda L,total=0:size(L[1:],total+1),如果L else total
。请查看以了解使用return 1+len()
的len()
调用不在尾部,add
操作符位于尾部位置:返回add(1,len())
,将其与size()
函数进行比较(您可以将其重写为多行def
,以区别于len()
显式)