鱼C论坛

 找回密码
 立即注册
查看: 3218|回复: 9

[已解决]如何判断一个列表的元素是否都是列表?

[复制链接]
发表于 2021-5-1 13:36:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 DrWhiter 于 2021-5-2 14:16 编辑

我的想法是用for提取列表中每一个元素,再挨个用list函数判断是不是列表,如果全是列表就输出"Yes",如果不是就输出"No"
但在写的时候发现一个问题:for循环每次执行的语句是一样的,也就是说,for循环结束后,保存下来的只有最后一次的信息。因此,只要输入列表的最后一项是一个列表,那么它就可以“蒙混过关”
希望能有一些新思路
最佳答案
2021-5-1 15:01:34
如果只是判断是否都是
那么你可以找到不是的时候就直接break
输出NO就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-1 15:51:13 | 显示全部楼层
本帖最后由 DrWhiter 于 2021-5-2 09:05 编辑

差不多写好了,放上来给大家参考一下
  1. x = [[1,2,3],[4,5,6],[7,8,9]]
  2. for n in x:
  3.     type(n)
  4.     if bool(isinstance(n,list)):
  5.         k=5
  6.     else:
  7.         k = 3
  8.         break
  9. if k != 5:
  10.      print("No")
  11. else:
  12.       print(“Yes”)
复制代码

欲见完整版,请点击这里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-1 17:18:44 | 显示全部楼层
本帖最后由 DrWhiter 于 2021-5-3 06:27 编辑

写好了,放出来给大家参考一下
  1. x = [[1,2,3],[4,5,6],[7,8,9]]
  2. for n in x:
  3.     type(n)
  4.     if bool(isinstance(n,list)):
  5.         k=5
  6.     else:
  7.         k = 3
  8.         break
  9. if k != 5:
  10.      print("No")
  11. else:
  12.      print("Yes")
复制代码

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

使用道具 举报

发表于 2021-5-1 13:46:40 | 显示全部楼层
flag = True
for i in list:
    if i not is list:
        flag = Flase
        break

根据flag来输出结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 13:48:56 | 显示全部楼层
  1. def islst(s):
  2.     for x in s:
  3.         if type(x)!=list:
  4.             return False
  5.     return True        

  6. a=[0,[2],[3,4],6]   
  7. b=[0,[2],[3,[5],4],6]   
  8. c=[0,2,2,6]   
  9. d=[]
  10. e=[2]
  11. f=[[3]]
  12. g=[[]*5]

  13. print(islst(a))
  14. print(islst(b))
  15. print(islst(c))
  16. print(islst(d))
  17. print(islst(e))
  18. print(islst(f))
  19. print(islst(g))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 13:52:09 | 显示全部楼层
我这个代码  空列表 也算了,你要是不算 需要修改一下代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 15:01:34 | 显示全部楼层    本楼为最佳答案   
如果只是判断是否都是
那么你可以找到不是的时候就直接break
输出NO就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 15:05:06 | 显示全部楼层
我试图用一行代码实现。。
  1. ls = [[], [1, 2], 'a', ['a', 'b']]
  2. print(len(set(list(map(type, ls)))) == 1 and type(ls[0]) is list)

  3. #注:只是判断ls里面的第一层是否为列表。若 ls=[] 将判为False;若 ls=[ [] ] 将判为 True。
复制代码


今天重新学了map方法,就用上了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 15:46:11 | 显示全部楼层
阿奇_o 发表于 2021-5-1 15:05
我试图用一行代码实现。。

为什么不用all(map(...))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-1 22:21:16 | 显示全部楼层
kogawananari 发表于 2021-5-1 15:46
为什么不用all(map(...))

高!我没有用过all(),刚刚查了一下才知道,感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 08:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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