计算嵌套列表中某一层列表的数字元素个数<新人求助>
【问题描述】输入一个嵌套列表nums,再输入一个层数n,求该层的数字元素个数。
【输入形式】
第一行输入列表,元素是自然数,包括方括号,逗号分隔
【输出形式】
整数
【样例输入】
,7],8]
3
【样例输出】
2
【样例说明】
输入样例的嵌套有三个层次,当输入3的时候,就是计算第三层次嵌套列表的数字元素个数。 如果输入的是2,则第2层次嵌套列表中,数字元素的个数是3.
我的代码在测试时有两个数据不通过,但我自己执行的时候是可以的,希望能看到大佬的代码对比然后改进自己的代码 本帖最后由 qq1151985918 于 2021-5-22 14:12 编辑
<font color="red">[已解决]</font>计算嵌套列表某一层次的元素数量<新人求助>(可以的话麻烦看看我的代码怎么改)
https://fishc.com.cn/thread-196130-1-1.html
(出处: 鱼C论坛)
刚发现本题跟我所回复的帖子中有所不同,上一个嵌套列表算一个元素,这一个是计算数字数量,有所区别,请对照。
def level(data:list) -> list:
res = )]
for i in data:
if type(i) == list:
res += level(i)
return res
##data = , 7], 8]
data = eval(input("输入嵌套列表:"))
num = int(input("输入需要计算的层次:"))
print(level(data))
qq1151985918 发表于 2021-5-22 13:19
[已解决]计算嵌套列表某一层次的元素数量<新人求助>(可以的话麻烦看看我的代码怎么改)
https://fish ...
求该层的数字元素个数
难度比你帖子上的难度大多了 ba21 发表于 2021-5-22 13:59
求该层的数字元素个数
难度比你帖子上的难度大多了
刚看了下,是不太一样,上个帖子 嵌套列表算一个元素,这个帖子不算,不过也没难多少,改一行代码就好了。
def level(data:list) -> list:
res = )]
for i in data:
if type(i) == list:
res += level(i)
return res
##data = , 7], 8]
data = eval(input("输入嵌套列表:"))
num = int(input("输入需要计算的层次:"))
print(level(data))
我刚注意到,原来这两个帖子都是你问的。 qq1151985918 发表于 2021-5-22 14:10
刚看了下,是不太一样,上个帖子 嵌套列表算一个元素,这个帖子不算,不过也没难多少,改一行代码就好了 ...
你2个贴的代码,和我对题目理解的不一至。不知道是不是我想多了。于是我上网找了下该题的相关资料,如下:
data = , 7, ], 8, , 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,depth+1,n)
return result
else:
return 0
result = 0
for i in range(len(data)):
result = result + getSum(data,1,n)
print(result)
# 该函数也是我以为的要达到的 (实现方式比效另类, 效率明显要比递归快)
# 来自 https://tuenity.blog.csdn.net/article/details/102722592
a = ', 7, ], 8, , 7]]'
c = n
b = ''.join(a)
num= 0
sum=0
for i in range(0,len(b)):
if(b=='['):
num+=1
elif(b==']'):
num-=1
if (c == num) and (b!='[') and (b!=']' and b!=',' and b.isdigit()==False):
sum += 1
print(sum)
# 然后就是你们认为的结果
def level(data:list) -> list:
res = )]
for i in data:
if type(i) == list:
res += level(i)
return res
print(level(data))
本帖最后由 qq1151985918 于 2021-5-22 16:01 编辑
ba21 发表于 2021-5-22 15:28
你2个贴的代码,和我对题目理解的不一至。不知道是不是我想多了。于是我上网找了下该题的相关资料,如下 ...
哦,你是认为如果同一层次可能有多个列表,可能题目样例没体现出来,其实那样用我这个递归也并不难
data = , 7, ], 8, , 7]]
n = 3
def level(data:list) -> list:
res = )]
same_level = []
for i in data:
if type(i) == list:
same_level += i
if same_level:
res += level(same_level)
return res
print(level(data))
qq1151985918 发表于 2021-5-22 15:40
哦,你是认为如果同一层次可能有多个列表,可能题目样例没体现出来,其实那样用我这个递归也并不难
不错
不过还是另类那个好。。
本帖最后由 qq1151985918 于 2021-5-22 16:18 编辑
ba21 发表于 2021-5-22 15:48
不错
不过还是另类那个好。。
另类那个比较容易出bug,比如说,如果输入了两个空格就会出bug,如果有负号也会有bug,当然负数不是自然数,
或许改成b = str(eval(a)) 好一些
或者把最后一个条件改成 (b[ i ].isdigit()==True and b.isdigit()==False)
感谢,我看看
页:
[1]