Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的每项长度_Python_Search - Fatal编程技术网

Python中的每项长度

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

我试图定义一个函数,如果列表中的每个项都小于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 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()
显式)