繁体   English   中英

汇总列表和数字的Python函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM