akcw 发表于 2021-5-22 12:29:01

计算嵌套列表中某一层列表的数字元素个数<新人求助>

【问题描述】

输入一个嵌套列表nums,再输入一个层数n,求该层的数字元素个数。
【输入形式】

第一行输入列表,元素是自然数,包括方括号,逗号分隔
【输出形式】

整数
【样例输入】

,7],8]

3

【样例输出】

2
【样例说明】

输入样例的嵌套有三个层次,当输入3的时候,就是计算第三层次嵌套列表的数字元素个数。 如果输入的是2,则第2层次嵌套列表中,数字元素的个数是3.

我的代码在测试时有两个数据不通过,但我自己执行的时候是可以的,希望能看到大佬的代码对比然后改进自己的代码

qq1151985918 发表于 2021-5-22 13:19:45

本帖最后由 qq1151985918 于 2021-5-22 14:12 编辑

<font color="red">[已解决]</font>计算嵌套列表某一层次的元素数量&lt;新人求助&gt;(可以的话麻烦看看我的代码怎么改)
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))

ba21 发表于 2021-5-22 13:59:02

qq1151985918 发表于 2021-5-22 13:19
[已解决]计算嵌套列表某一层次的元素数量&lt;新人求助&gt;(可以的话麻烦看看我的代码怎么改)
https://fish ...

求该层的数字元素个数

难度比你帖子上的难度大多了

qq1151985918 发表于 2021-5-22 14:10:36

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:34:59

我刚注意到,原来这两个帖子都是你问的。

ba21 发表于 2021-5-22 15:28:25

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 15:40:56

本帖最后由 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))

ba21 发表于 2021-5-22 15:48:49

qq1151985918 发表于 2021-5-22 15:40
哦,你是认为如果同一层次可能有多个列表,可能题目样例没体现出来,其实那样用我这个递归也并不难

不错
不过还是另类那个好。。

qq1151985918 发表于 2021-5-22 15:59:34

本帖最后由 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)

akcw 发表于 2021-5-22 16:21:47

感谢,我看看
页: [1]
查看完整版本: 计算嵌套列表中某一层列表的数字元素个数<新人求助>