第6章-3 列表或元组的数字元素求和
分析
题目
输入一个嵌套列表,再输入层数,求该层的数字元素个数。
解法
定义一个递归进入求解的函数
经过评论区提示,大概知道了哪里存在问题,也即从第一个多层嵌套的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)