我需要一个帮助来递归获取具有大于等于3个奇数的列表列表。因此,例如,[1、2、3、4,[3、3、3]]返回1,因为只有内部列表具有3个以上的奇数。 [2,5,5,5,[3,3,3]]返回2,因为外部和内部循环都具有3个以上的奇数。
对我来说,最困难的部分是跟踪计算奇数数量的条件。因此,我想到了在每个递归步骤中都使用一个额外的参数(cnt)的想法。
底部的伪代码不起作用,它只是我的基本想法。有人可以给我一些提示或想法吗?
def count_even(L):
def helper(L, cnt):
if L is empty return 0
elif cnt == 3 return 1 # when odd numbers >= 3 then it returns
elif L[0] is even? return helper(L[0], count+1) # increment cnt
elif L[0] is list? # if detects inner loop, then another recursion
inner_list = L[0]
return helper(inner_list[0], 0) + helper(inner_list[1:], 0)
else: # L[0] is not even
return helper(L[1:], count)
# calling a helper function with cnt=0
helper(L, 0)
答案 0 :(得分:0)
这是一个简单的解决方案。可能更短,但更易读只要计算大于3的返回几率,如果您击中list
对象,只需再次调用函数即可。这也适用于嵌套列表。
def count_even(L):
c = 0
numberOfOddsInList = 0
for i in L:
if type(i) is list:
numberOfOddsInList = count_even(i)
else:
if i % 2 == 1:
c+=1
return (c >= 3) + numberOfOddsInList
print(count_even([1, 2, 3, 1, [3, 3, 3,[1,1,1]]]))# returns 3