【PTA-python】第6章-6 求指定层的元素个数 (40 分) --递归调用

分析

python的多层嵌套列表处理

题目

输入一个嵌套列表,再输入层数,求该层的数字元素个数。

解法

定义一个递归进入求解的函数
在这里插入图片描述

经过评论区提示,大概知道了哪里存在问题,也即从第一个多层嵌套的list就开始进入并计算嵌套层数,如果后面还有多层嵌套的数据,就无法计算在内。(只统计了第一个多层嵌套)
[1,2,[3,4,[5,6],7],8,[1,[2,3]]] 遇到这种情况就没有加上2,3两个元素

def add_list(the_list,m):
    cnt=0
    for each_item in the_list:
        if m==1:#进入到要求的层数
            for i in the_list:
                if isinstance(i,int):#计算int型数据的个数
                    cnt+=1
            print(cnt)
            break
        if isinstance(each_item,list): #each_item是否是列表
            add_list(each_item,m-1)#调用add_list()函数
n=eval(input())
m=int(input())
add_list(n,m)

函数传递两个参数无法实现功能:

def add_list(l,cnt,x):
    s=0
    for i in l:
        if type(i) is int and x==cnt:#这里的s增加条件一定注意,必须是int而且是这一层
            s+=1
    for i in l:
        if type(i) is list:
            s+=add_list(i,cnt+1,x)
    return s
lst=eval(input())
x=int(input())
print("{}".format(add_list(lst,1,x)))

对自己代码的修改

在这里插入图片描述

def add_list(the_list,m):
    cnt=0
    for each_item in the_list:
        if m==1 and type(each_item)==int:#进入到要求的层数时cnt才增加
            cnt+=1
        if type(each_item)==list: #each_item是否是列表
            cnt+=add_list(each_item,m-1)#调用add_list()函数
    return cnt
n=eval(input())
m=int(input())
print("{}".format(add_list(n,m)))

采用入队出队的思想,匹配前后括号

使用num计算[的个数,如果有[则说明深入了一层。

a = input()
c = int(input())
b = ''.join(a)
num= 0
sum=0
for i in range(0,len(b)):
    if(b[i]=='['):
        num+=1
    elif(b[i]==']'):
        num-=1
    if (c == num) and b[i]!='[' and b[i]!=']' and b[i]!=',' and b[i+1].isdigit()==False:#最后一个条件是因为肯能遇到两位的字符,12,只能遇到2时再添加(2后面是,或方括号)否则,12将被当作两个数去处理
        sum += 1
print(sum)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值