Python中嵌套列表的和

2024-04-18 11:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对嵌套元素的列表求和

例如,numbers=[1,3,5,6,[7,8]]应该产生sum=30

我写了以下代码:

def nested_sum(L):
    sum=0
    for i in range(len(L)):
       if (len(L[i])>1):
          sum=sum+nested_sum(L[i])
       else:
          sum=sum+L[i]
    return sum

上述代码给出以下错误:

object of type 'int' has no len()

我也试过len([L[i]]),但仍然没有成功。

有人能帮忙吗?它是Python3.3


Tags: 代码in元素列表forlenreturnif
3条回答

您需要使用isinstance检查元素是否是列表。另外,您可能需要遍历实际的列表,以使事情更简单。

def nested_sum(L):
    total = 0  # don't use `sum` as a variable name
    for i in L:
        if isinstance(i, list):  # checks if `i` is a list
            total += nested_sum(i)
        else:
            total += i
    return total

使用lambda处理嵌套列表的快速递归:

rec = lambda x: sum(map(rec, x)) if isinstance(x, list) else x

应用于列表的rec将返回值的和(递归地),返回值。

result = rec(a)

通常认为对duck type更像是python,而不是显式类型检查。像这样的事情需要任何一个iterable,而不仅仅是列表:

def nested_sum(a) :
    total = 0
    for item in a :
        try:
            total += item
        except TypeError:
            total += nested_sum(item)
    return total

相关问题 更多 >