[英]Python function that sums up lists and numbers
我正在学习python。 如何在python中修改此函数,以便将任意数量的整数或列表或列表与数字相加? 现在只加整数
def super_sum(*args):
''' Sums up the arguments
'''
total = 0
for i in args:
total += i
return total
我希望能够调用该函数并获取如下所示的值
print super_sum(20, 20) # outputs 40
要么
a = [10, 20, 30, 40]
b = [100, 20]
print super_sum(a, b) # outputs 220
要么
a = [10, 30, 50]
print super_sum(a, 50) # outputs 140
简单的方法是递归:
def super_sum(*args):
''' Sums up the arguments
'''
total = 0
for i in args:
if isinstance(i, (int, long)): # On Py3, just isinstance(i, int)
total += i
else:
total += super_sum(*i)
return total
还有其他方法可以执行您的测试,例如,避免显式类型检查的EAFP模式 :
for i in args:
try:
# Assume unpackable iterable...
total += super_sum(*i)
except TypeError:
# If not iterable, assume numeric
total += i
定义一个辅助函数:
def try_sum(x):
try:
return sum(x)
except TypeError:
return x
现在super_sum()
只是:
def super_sum(*args):
return sum(try_sum(x) for x in args)
(如果您想编写自己的使用for
循环而不是使用内置循环的sum()
,也可以随意这样做。它将直接插入。)
def super_sum(*args):
total = 0
args = list(args)
if len(args) == 1:
args = args[0]
for d in args:
if isinstance(d, list):
total += super_sum(d)
else:
total += d
return total
print super_sum([1, 2, [3, 4], 5], 3, [2, 3])
实际上,这比您所要求的要多一点,它将添加所有数字,并且传递的值可以在列表内包含列表。 通常称为deep_sum。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.