在给定列表的嵌套列表中求和

时间:2014-07-23 10:42:36

标签: python list

我想编写一个实现此目的的函数,如果给出:

t = [1,2,[2,2],[3,3]]

我想要一个能够实现的功能 [1,2,4,6]。这是我在Python中的代码:

t=[1,2,[2,2],[3,3]]

def nested_sum(t):
    for x in t:
        if type(t[x])=='int':
            t[x]=t[x]
        else:
            t[x]=['sum(t[x])']
    return t

nested_sum(t)

我收到了错误消息

Traceback (most recent call last):
  File "nested_sum.py", line 11, in <module>
    nested_sum(t)
  File "nested_sum.py", line 5, in nested_sum
    if type(t[x])=='int':
TypeError: list indices must be integers, not list

我不太确定我犯的错误。因为我的逻辑是:

type(t[0])=1是&#34; Int&#34;类型和type(t[2])=[2,2]是&#34;列表&#34;类型,我认为这些符合&#34; if ... else ...&#34;言。

任何帮助都会因为指出我的错误而受到赞赏。非常感谢你。

5 个答案:

答案 0 :(得分:4)

您可以使用isinstance将其放在单个列表中:

[sum(x) if isinstance(x,list) else x for x in t]

[1, 2, 4, 6]

你可以使用collection.Iterable,它可以在像元组等任何迭代上工作。

t = [1,2,[2,2],[3,3],(4,5)]

from collections import Iterable

print [sum(x) if isinstance(x, Iterable) else x for x in t]

[1, 2, 4, 6, 9]

在列表理解中,如果x是可迭代/列表,我们添加子元素的sumelse我们只需要元素x

使用您自己的代码,您将使用枚举来使用索引访问列表元素:

def nested_sum(t):
    for ind, x in enumerate(t):
        if type(t[ind])== int: # int not "int"
            t[ind] = x
        else:
            t[ind] = sum(t[ind])
    return t

代码ind是每个子元素的索引,x是实际的子元素

答案 1 :(得分:0)

当x是列表时使用sum(),否则将其附加到res

t=[1,2,[2,2],[3,3]]

def nested_sum(l):
    res = []
    for x in l:
        if type(x) == type([]):
            res.append(sum(x))
        elif type(x) == type(1):
            res.append(x)
    return res

nested_sum(t)

答案 2 :(得分:0)

def nested_sum(t):
    for index, item in enumerate(t):
        if type(item) == list:
            t[index] = sum(item)
    return t

说明:

enumerate(t)返回(0,t [0]),(1,t [1])等。

然后,对item中的每个t,检查item是否为list。如果是,请将其替换为该列表中所有元素的总和。这是在t[index] = sum(item)

中完成的

答案 3 :(得分:0)

答案是:

def nested_sum(mixed_list):
    res = list()
    for element in mixed_list:
        try:
            a = sum(element)
        except TypeError:
            a = element
        res.append(a)
    return res

如果列表包含数字和数字列表,则可以正常工作。

答案 4 :(得分:0)

代码的问题在于您循环遍历列表中的项目而不是索引。为了使它工作,您应该像这样更改您的代码:

def nested_sum(t):
    for x in range(len(t)):
        if type(t[x]) == int:
            t[x] = t[x]
        else:
            t[x] = sum(t[x])
    return t

另请注意,您的else子句中inttype(t[x]) == int中的sum(t[x])不应为字符串。