我想编写一个实现此目的的函数,如果给出:
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;言。
任何帮助都会因为指出我的错误而受到赞赏。非常感谢你。
答案 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是可迭代/列表,我们添加子元素的sum
或else
我们只需要元素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子句中int
和type(t[x]) == int
中的sum(t[x])
不应为字符串。