|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【问题描述】
输入一个嵌套列表nums,再输入一个层数n,求该层的数字元素个数。
【输入形式】
第一行输入列表,元素是自然数,包括方括号,逗号分隔
【输出形式】
整数
【样例输入】
[1,2,[3,4,[5,6],7],8]
3
【样例输出】
2
【样例说明】
输入样例的嵌套有三个层次,当输入3的时候,就是计算第三层次嵌套列表的数字元素个数。 如果输入的是2,则第2层次嵌套列表中,数字元素的个数是3.
我的代码在测试时有两个数据不通过,但我自己执行的时候是可以的,希望能看到大佬的代码对比然后改进自己的代码
你2个贴的代码,和我对题目理解的不一至。不知道是不是我想多了。于是我上网找了下该题的相关资料,如下:
- data = [1, 2, [3, 4, [5, 6], 7, [5, 6]], 8, [3, 4, [5, 6], 7]]
- n = 3
- # 该函数是我以为的要达到的
- # 来自 https://blog.csdn.net/liurongke/article/details/116305467
- def function(lis,lev,rank):
- cnt = 0
- for i in lis:
- if rank != lev and isinstance(i,list): #如果当前层数不是指定层数,并且该元素为列表,那么我们就进入该列表,然后增加一个层数
- cnt += function(i,lev,rank+1)
- elif rank == lev and isinstance(i,int) or isinstance(i,float): #如果是当前层数,并且是数字,就加起来
- cnt += 1
- return cnt
- print(function(data,n,1)) #函数(列表,指定层数,从第一层开始)
- # 该函数也是我以为的要达到的
- # 来自 https://www.cnblogs.com/dreamcoding/p/12694572.html
- def getSum(items,depth,n):
- if type(items) == int:
- if type(items) == int:
- if depth == n:
- return 1
- else:
- return 0
- else:
- if (type(items) == tuple) or (type(items) == list):
- result = 0
- for i in range(len(items)):
- result += getSum(items[i],depth+1,n)
- return result
- else:
- return 0
- result = 0
- for i in range(len(data)):
- result = result + getSum(data[i],1,n)
- print(result)
- # 该函数也是我以为的要达到的 (实现方式比效另类, 效率明显要比递归快)
- # 来自 https://tuenity.blog.csdn.net/article/details/102722592
- a = '[1, 2, [3, 4, [5, 6], 7, [5, 6]], 8, [3, 4, [5, 6], 7]]'
- c = n
- 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):
- sum += 1
- print(sum)
- # 然后就是你们认为的结果
- def level(data:list) -> list:
- res = [len([i for i in data if type(i) == int])]
- for i in data:
- if type(i) == list:
- res += level(i)
- return res
- print(level(data)[num - 1])
复制代码
|
|