Python 如何使用递归查找列表中的可除数?
我在做一个函数,把一个整数列表作为参数,我想看看列表中是否有5项可以被2整除 例如,如果我通过这个调用调用函数“find_numbers”:Python 如何使用递归查找列表中的可除数?,python,list,recursion,Python,List,Recursion,我在做一个函数,把一个整数列表作为参数,我想看看列表中是否有5项可以被2整除 例如,如果我通过这个调用调用函数“find_numbers”: print(find_numbers([1,4,6,8,5,66,22,3])) 它应返回: True 因为列表有5个项目可以被2(4,6,8,66和22)整除,否则它应该返回false 我该怎么做呢 谢谢你的帮助 注意:我需要在以后的程序中使用递归,我知道使用循环会更容易,但以后我会更头疼(再次感谢您)。编辑:为误读道歉。现在它是递归的,尽
print(find_numbers([1,4,6,8,5,66,22,3]))
它应返回:
True
因为列表有5个项目可以被2(4,6,8,66和22)整除,否则它应该返回false
我该怎么做呢
谢谢你的帮助
注意:我需要在以后的程序中使用递归,我知道使用循环会更容易,但以后我会更头疼(再次感谢您)。编辑:为误读道歉。现在它是递归的,尽管我很难弄清楚为什么需要这个 在列表中迭代,直到找到一个
n
数字,其中模2==0
%
是python模运算符
def find_numbers(l, i=0, count=0):
try:
if count == 5:
return True
elif l[i] % 2 == 0:
return find_numbers(l, i=i+1, count=count+1)
else:
return find_numbers(l, i=i+1, count=count)
except IndexError as e:
return False
print(find_numbers([1, 2, 4, 6, 3, 1])) # False
print(find_numbers([1, 1, 1, 1, 1, 1])) # False
print(find_numbers([1, 2, 2, 4, 6, 1])) # False
print(find_numbers([1, 2, 2, 2, 2, 2])) # True
print(find_numbers([1])) # False
当且仅当x
满足条件的次数足够多时,此项才会返回True。如果迭代到列表中不可操作值所在的索引(例如astr
),则会抛出错误。它将捕获索引器,以便可以像上一个示例中那样获取短列表
说明:这里需要记住的重要一点是,最后一个案例是调用堆栈的分支。因此,如果最后一个调用返回True | False
,并且之前的每个后续调用只能返回一个错误(我提到的str
输入案例)或True | False |另一个递归调用
,那么我们可以预期最后一个案例就是其中之一
另一个好处是,当它找到第五个匹配项时,它就会停止,这样你就不用再继续遍历列表了,我想。也许这就是OP想要递归的原因。这里有另一种方法,可以保存列表元素的记录,这些元素可以被2整除:
def divi(a, number=5, divs=[]):
if a == []:
return True if len(divs) == number else False
if not a[0] % 2:
divs.append(a[0])
return divi(a[1:], divs)
test = [
[1, 2, 4, 6, 3, 1],
[1, 1, 1, 1, 1, 1],
[1, 2, 2, 4, 6, 1],
[1,2, 2, 2, 2, 2],
[1]
]
for elm in test:
divs = []
print('{} => {} # {}'.format(elm, divi(elm, divs=divs), divs))
输出:
[1, 2, 4, 6, 3, 1] => False # [2, 4, 6]
[1, 1, 1, 1, 1, 1] => False # []
[1, 2, 2, 4, 6, 1] => False # [2, 2, 4, 6]
[1, 2, 2, 2, 2, 2] => True # [2, 2, 2, 2, 2]
[1] => False # []
你能至少包括一次尝试和你遇到的问题吗?