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

Python 在给定列表的嵌套列表中求和,python,list,Python,List,然后我想写一个函数来达到这个目的,如果给定: t = [1,2,[2,2],[3,3]] 我想要一个使t成为 [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

然后我想写一个函数来达到这个目的,如果给定:

t = [1,2,[2,2],[3,3]]
我想要一个使t成为
[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
回溯(最近一次呼叫最后一次):
文件“nested_sum.py”,第11行,在
嵌套和(t)
文件“nested_sum.py”,第5行,嵌套_sum
如果类型(t[x])=='int':
TypeError:列表索引必须是整数,而不是列表
我不太确定我犯了什么错误。因为我的逻辑是:

type(t[0])=1
属于“Int”类型,而
type(t[2])=[2,2]
属于“List”类型,我认为这符合“if…else…”语句

如果能帮我指出错误,我们将不胜感激。提前非常感谢。

使用sum()当x是一个列表时,将其附加到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)
当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)
说明:

枚举(t)
返回(0,t[0]),(1,t[1])等

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

说明:

枚举(t)
返回(0,t[0]),(1,t[1])等


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

中完成的。您可以使用iInstance将其放入单个列表中:

[如果是实例(x,列表)则求和(x),否则x代表t中的x]

[1, 2, 4, 6]
您可以使用collection.Iterable,它可以处理任何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是一个可数/列表,我们添加子元素的
sum
,或者
else
我们只取元素
x

使用您自己的代码,您可以使用enumerate使用列表元素的索引来访问列表元素:

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
是实际的子元素

您可以使用iInstance将其放入单个列表中:

[如果是实例(x,列表)则求和(x),否则x代表t中的x]

[1, 2, 4, 6]
您可以使用collection.Iterable,它可以处理任何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是一个可数/列表,我们添加子元素的
sum
,或者
else
我们只取元素
x

使用您自己的代码,您可以使用enumerate使用列表元素的索引来访问列表元素:

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
是实际的子元素

答案如下:

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
如果列表中包含数字和数字列表,则可以使用此选项。

答案是:

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

如果列表中包含数字和数字列表,则可以使用此选项。

代码的问题在于,您正在循环列表中的项目,而不是索引。要使其正常工作,您应该如下更改代码:

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子句中的
type(t[x])==int
sum(t[x])
中的
int
不应该是字符串。

代码的问题是,您正在循环列表中的项目,而不是索引。要使其正常工作,您应该如下更改代码:

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子句中的
int
in
type(t[x])==int
sum(t[x])
不应是字符串。

对于t中的x
x
绑定到列表中的每个项目,而不是每个索引。感谢jonrsharpe,我现在发现了我的错误。
对于t中的x
x
绑定到列表中的每个项目,不是每一个索引。谢谢jonrsharpe,我现在发现了我的错误。@wim是的,我同意,我要添加它。谢谢Padraic的详细解释。因为我正在阅读《思考Python》第10章,在我目前的阶段,您的编程对我来说似乎太高级了。如果我获得了更多关于Python的知识,我将在稍后参考您的解释。谢谢。@wim是的,我同意,我想补充一下。谢谢Padraic的详细解释。因为我正在阅读《思考Python》第10章,在我目前的阶段,您的编程对我来说似乎太高级了。如果我获得了更多关于Python的知识,我将在稍后参考您的解释。谢谢。谢谢Railslide,在for条件下的简单更改可以使程序运行。谢谢Railslide,在for条件下的简单更改可以使程序运行。谢谢Saimadhav对函数枚举的解释=]谢谢Saimadhav对函数枚举的解释=]