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
intype(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对函数枚举的解释=]