因此,如果我有一个列表,请说:[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))
仅当列表中的最后一个元素是数字时才有效。让我们假设它是一个字符串,我怎么能改变它?
答案 0 :(得分: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或构建自己的蹦床!