Python:“递归”获取具有大于等于3个奇数的列表列表中的数字

时间:2018-09-12 21:02:27

标签: python algorithm recursion

我需要一个帮助来递归获取具有大于等于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) 

1 个答案:

答案 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