鱼C论坛

 找回密码
 立即注册
查看: 2000|回复: 13

[已解决]计算嵌套列表某一层次的元素数量

[复制链接]
发表于 2022-3-6 15:56:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【问题描述】

输入一个嵌套列表,再输入层数,求该层的元素个数。如果求第二层次的元素个数,但是第二层次还有第三层次嵌套,则嵌套列表算一个元素。

【输入形式】

第一行输入嵌套列表,包含方括号,逗号分隔,每个元素是整数

第二行输入需要计算的层次,整数,大于0
【输出形式】

整数,计算所得的个数
【样例输入】

[1,2,[3,4,[5,6],7],8]

2

【样例输出】

4
【样例说明】

在第二层次 有3,4,[5,6], 7 等4个元素
最佳答案
2022-3-6 16:17:42
本帖最后由 isdkz 于 2022-3-6 16:19 编辑
  1. def func(arr, level = 1):
  2.         res = 0
  3.         if level == 1:
  4.             res += len(arr)
  5.         else:
  6.             for each in arr:
  7.                 if type(each) == list:
  8.                     res += func(each, level - 1)
  9.         return res

  10. arr = [1,2,[3,4,[5,6],7],8]

  11. print(func(arr, 2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-6 16:02:43 | 显示全部楼层
  1. arr = [1, 2, [3, 4, [5, 6], 7], 8]

  2. def func(arr, res, level = 1):
  3.     if res != level:
  4.         return func(arr, res, level + 1)
  5.     else:
  6.         return len(arr)

  7. print(func(arr, 2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:17:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-3-6 16:19 编辑
  1. def func(arr, level = 1):
  2.         res = 0
  3.         if level == 1:
  4.             res += len(arr)
  5.         else:
  6.             for each in arr:
  7.                 if type(each) == list:
  8.                     res += func(each, level - 1)
  9.         return res

  10. arr = [1,2,[3,4,[5,6],7],8]

  11. print(func(arr, 2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 16:29:32 | 显示全部楼层

大佬,我没有很看得懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 16:32:44 | 显示全部楼层
  1. def func(nums,n):
  2.     if n == 1:
  3.         return len(nums)
  4.     if n > 1:
  5.         for i in nums:
  6.             if type(i) is list:
  7.                 n = n - 1
  8.                 return func(i,n)

  9. nums = eval(input())
  10. n = int(input())
  11. print(func(nums,n))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 16:33:16 | 显示全部楼层

这是我自己写的一个程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:33:17 | 显示全部楼层
ylhhh 发表于 2022-3-6 16:29
大佬,我没有很看得懂

你可以用多个不同的列表来测试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:34:31 | 显示全部楼层
ylhhh 发表于 2022-3-6 16:29
大佬,我没有很看得懂


抱歉,刚才写太快了,有错,已修改:
  1. arr = [1, 2, [3, 4, [5, 6], 7], 8]

  2. def func(arr, res, level = 1):
  3.     if res != level:
  4.         for each in arr:
  5.             if type(each) != int:
  6.                 return func(each, res, level + 1)
  7.     else:
  8.         return len(arr)

  9. print(func(arr, 2))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 16:37:09 | 显示全部楼层
傻眼貓咪 发表于 2022-3-6 16:34
抱歉,刚才写太快了,有错,已修改:

谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:38:42 | 显示全部楼层
傻眼貓咪 发表于 2022-3-6 16:34
抱歉,刚才写太快了,有错,已修改:

你这个还是有点问题:比如你用 [1, [2], [3, 4, [5, 6], 7, 5, 8], [8]] 这个列表来测试得到的是结果 1,

你的只得出了第一个嵌套列表的长度
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:46:23 | 显示全部楼层

你的代码跟 8 楼的是一个问题, 像 [1, [2], [3, 4], [8]] 这样的列表里面有三个嵌套列表,

你没有统计所有第二层列表的,就只得到了第一个 二层列表 的长度。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:46:43 | 显示全部楼层
isdkz 发表于 2022-3-6 16:38
你这个还是有点问题:比如你用 [1, [2], [3, 4, [5, 6], 7, 5, 8], [8]] 这个列表来测试得到的是结果 1, ...

我也是有想过这点,但是如果真的是这样,就不符合逻辑了,比如:
[1, [2], [3, 4, [5, 6], 7, 5, 8], [8]]

测试第 2 层,那么需要测试 [2] 还是  [3, 4, [5, 6], 7, 5, 8] 还是 [8] 呢?
该不会全部加起来吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:48:25 | 显示全部楼层
傻眼貓咪 发表于 2022-3-6 16:46
我也是有想过这点,但是如果真的是这样,就不符合逻辑了,比如:
[1, [2], [3, 4, [5, 6], 7, 5, 8], [ ...

那几个不是都属于第二层列表吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 16:50:59 | 显示全部楼层
isdkz 发表于 2022-3-6 16:48
那几个不是都属于第二层列表吗?

也是,可能我的思路有错吧,哈哈,我是把它当成每层只有一个列表元素
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 05:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表