其实挺简单的一道题,当时脑抽了转不过弯来(其实主要还是因为我人菜),题目如下
- 题目描述
输入一个嵌套列表,嵌套层次不限,根据层次数来求列表元素的加权个数和。
第一层每个元素算一个元素,第二层每个元素算2个元素,第三层每个元素算3个元素,第四层每个元素算4个元素,…,以此类推进行计算。- 输入
在一行中输入一个列表。- 输出
在一行中输出加权元素个数值。- 样例输入
[1,2,[3,4,[5,6],7],8]
- 样例输出
15
- 正确解题思路✔
通过递归的方法,判断当层有没有列表,存在列表就统计该层非列表元素并乘以深度权值同时向内层列表递归并将深度权值加1,不存在列表时直接用该层元素个数乘以权值返回即可,注意递归需设置终止条件 - 错误解题思路❌
模拟考时脑抽了想着用字符串操作来做,先将输入字符串中的,
替换为空字符,然后每次遇到[
就将权值加1,遇到]
就将权值减1,忽略了替换掉,
后,元素12
将被判定为1
和2
两个元素,进而计算出错误的结果 - 程序
def fn(base,depth): if(not ([i for i in base if type(i) == list])): return len([i for i in base])*depth else: temp = [i for i in base if type(i) == list] tempAmount = 0 for i in temp: tempAmount += fn(i,depth+1) return len([i for i in base if type(i) == int])*depth + tempAmount List = eval(input()) print(fn(List,1))