例如我有一个包含这样的数字的列表:
a = [10,[20,30],40]
或
b = [[10,20],30]
现在我必须添加上面列表中的所有元素。
所以,如果添加第一个列表,那么我应该得到如下答案:10+20+30+40 = 100
。
对于第二个b,如下:10+20+30 = 60
。
解决方案将表示为一种功能。
我尝试过这个,但只有在没有嵌套列表时才可以添加。
def sum(t):
total = 0
for x in t:
total = total+x
return total
现在任何人都可以帮我解决python编程中的这类问题。 提前谢谢!!!!!
答案 0 :(得分:1)
您可以使用 reduce :
x = reduce(lambda prev,el: prev+([x for x in el] if type(el) is list else [el]), x, [])
并使用其结果来提供循环。
def sum(t):
t = reduce(lambda prev,el: prev+([x for x in el] if type(el) is list else [el]), t, [])
total = 0
for x in t:
total = total+x
return total
答案 1 :(得分:0)
似乎最好的方法是迭代顶级列表并检查每个元素的类型(使用is_instance(type, item)
)。如果是整数,则将其添加到总数中,否则如果是列表,则迭代该列表。
使函数递归会使它最有用。
编辑:对于任何绊倒这个问题的人来说,这是一个例子。
def nested_sum(input_list):
total = 0
for element in input_list:
if isinstance(element, int):
total += element
elif isinstance(element, list):
total += nested_sum(element)
else:
raise TypeError
return total
用法:
my_list = [72, 5, [108, 99, [8, 5], 23], 44]
print nested_sum(my_list)
>>> 364
答案 2 :(得分:0)
您可以递归展平为一个列表:
def flatten(lst, out=None):
if out is None:
out = []
for item in lst:
if isinstance(item, list):
flatten(item, out)
else:
out.append(item)
return out
现在您可以使用sum
:
>>> sum(flatten([10, [20, 30], 40]))
100
答案 3 :(得分:0)
您需要定义递归来处理嵌套列表:
rec = lambda x: sum(map(rec, x)) if isinstance(x, list) else x
应用于列表的 rec
将返回值(递归),返回值。返回值。
result = rec(a)