添加列表中的所有数字

时间:2014-10-13 21:03:03

标签: python list recursion

因此,如果我有一个列表,请说:[1,2,'hello']我想在列表中添加所有数字,(字符串应该被忽略)。我希望它返回数字3(1 + 2)。而且函数必须是递归的。

这就是我的想法:

import numbers
def isnumber(x):
  return isinstance(x, numbers.Number)

def sum_first(list):
    if not list:
        return 0
    elif isnumber(list[-1]):                        
        return list[-1] + sum_first(list[:-1])   


list=eval(input("Enter a list: "))
print(sum_first(list))

仅当列表中的最后一个元素是数字时才有效。让我们假设它是一个字符串,我怎么能改变它?

2 个答案:

答案 0 :(得分:3)

您只处理两种情况:

  1. 列表为空
  2. 最后一个元素是数字
  3. 您的示例列表不适合 大小写,因此您最终返回None

    添加第三个​​分支:

    def sum_first(lst):
        if not lst:
            return 0
        elif isnumber(lst[-1]):
            return lst[-1] + sum_first(lst[:-1])
        else:
            return sum_first(lst[:-1])
    

    现在你处理最后一个元素不是数字的情况;你忽视它来处理它;没有那个元素的列表递归。

    我将您的list变量重命名为lst,以避免屏蔽内置类型。

答案 1 :(得分:1)

reduce可以看作是一种递归函数。如果你不打算编写自己的递归函数,那么可能就是这样做

import operator as op


def silent_int(v):
    try:
        return int(v)
    except ValueError:
        return 0


xs = [1, 2, 'hello', '4']

print reduce(op.add, map(silent_int, xs))

显然,计算数字的正确方法应该是使用sum但是使用递归限制你可以使用reduce或构建自己的蹦床!