提问人:john bilbrey 提问时间:11/3/2022 更新时间:11/4/2022 访问量:451
在具有嵌套列表的列表中查找每个级别的总和
Finding the sum of each level in a list with nested lists
问:
我需要创建一个 python 函数,该函数接受一个数字列表(可能还有列表)并返回嵌套级别和该级别总和的列表。例如:
给定一个列表 [1,4,[3,[100]],3,2,[1,[101,1000],5],1,[7,9]] 我需要计算级别 0 上所有整数的值并将它们相加,然后计算级别 1 上的整数并将它们相加,依此类推,直到我找到最深嵌套级别的总和。
上面提到的示例列表的返回输出应为: [[0,11], [1,25], [2,1201]] 其中,每个列表中的第一个值是级别,第二个值是总和。我应该使用递归或while循环,而不导入任何模块。
我最初的想法是创建一个循环,遍历列表并找到任何整数(忽略嵌套列表),计算总和,然后从列表中删除这些整数,将下一个最高级别转换为整数,然后重复。但是,我找不到将列表中的列表转换为独立整数值的方法(本质上是删除第 0 级并将第 1 级变成新的第 0 级)。 我现在正在使用的代码如下:
def sl(lst,p=0):
temp = []
lvl = 0
while lst:
if type(lst[0]) == int:
temp.append(lst[0])
lst = lst[1:]
return [lvl,sum(temp)]
elif type(lst[0]) == list:
lvl += 1
return [lvl,sl(lst[1:],p=0)]
基本上,我创建了一个 while 循环来遍历、查找任何整数,并将其附加到一个临时列表中,然后在那里我可以找到总和。但是,我找不到一种方法来使循环访问下一个级别以执行相同的操作,尤其是当原始列表从左到右在级别上下移动时。
答:
我会这样做:
array = [1, 4, [3, [100]], 3, 2, [1, [101, 1000], 5], 1, [7, 9]]
sum_by_level = []
while array:
numbers = (element for element in array if not isinstance(element, list))
sum_by_level.append(sum(numbers))
array = [element for list_element in array if isinstance(list_element, list) for element in list_element]
print(sum_by_level)
print(list(enumerate(sum_by_level)))
给出输出:
[11, 25, 1201]
[(0, 11), (1, 25), (2, 1201)]
因此,我将非列表元素相加,然后取列表元素并剥离外部列表。我重复此操作,直到数组为空,这意味着所有级别都被剥离了。我放弃了直接保存级别信息,因为它只是索引,但如果需要,您可以使用枚举(虽然提供元组而不是列表)。
上一个:如何在 Python 中对许多嵌套列表中的项目执行函数
下一个:嵌套列表上的递归
评论