• python每日一题:嵌套的列表转换为简单列表


    方法一:程序内容:
    1.定义一个judge(abc)函数,判定abc列表中的数据是否全是int,若是返回0,简单列表;否则,返回1
    2.定义lister(abc),如果abc中的元素都为int,则直接添加到b列表中;如果abc中的元素i仍为list,则将其元素i中的子元素逐个插入到b中,
    3.判断b中的元素是否为int,如果是,代表b是一个简单列表,返回b;否则,返回lister (b),递归调用
    def judge(abc):###判断是否有列表嵌套,如果列表嵌套,返回1,如果列表中数据都为int,即简单列表,返回0
        for i in abc:
            if isinstance(i, list):
                return 1
        return 0
    
    def lister(abc):
      b = []
      for i in abc:
          if isinstance(i, list):
               b+=i
          else:
              b.append(i)
      if judge(b):
          return lister(b)
      else:
          return b
    
    
    a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60]
    print(lister(a))
    方法二:程序内容:
    1. 定义一个全局空列表b,存储列表abc转化后的数据元素
    2.定义lister(abc),如果abc中的元素i为int,则直接添加到b列表中,并删除abc中的元素i;如果abc中的元素i为list,则将其元素i的子元素合并到abc中,并删除i
    3.判断len(abc),如果是0,表示转换完成,返回b;否则,返回lister (abc),递归调用
    b = []
    def lister(abc):
      for i in abc:
          if isinstance(i, list):
              abc=i+abc
              abc.remove(i)
          else:
              abc.remove(i)
              b.append(i)
          break
      if len(abc):
          lister(abc)
      return b
    
    a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60]
    print(lister(a))
    方法三:由于嵌套list的标志是使用了多个“[”,“]".程序的思想是将list转换为str,然后采用str相关函数去除"[","]",再转换为列表即可:
    a=[[[10,[[[[2,5],7],10],45],[5,45]],55,20],55,60]
    b=str(a)   #转换为字符串
    b=b.replace('[','')#删除"["
    b=b.replace(']','')#删除"]"
    c=[0]*100
    i=0
    j=b.find(',')
    while j>=0:
        c[i]=int(b[0:j])#将","前面的字符串转换为列表中的子数据
        b=b[j+1:]#将","后面的字符赋值给b,即删除提取过的字符[0:j]
        j=b.find(',')#查找",",提取出在字符串中的字节位
        i+=1
    c[i]=int(b)
    print(c[:i+1])

    调试后的结果如下:

    [10, 2, 5, 7, 10, 45, 5, 45, 55, 20, 55, 60]

     方法四:利用iterable 检测是否是可迭代类型

    # encoding: utf-8
    from collections.abc import Iterable
    
    a = [[[10, [[[[2, 5], 7], 10], 45], [5, 45]], 55, 20], 55, 60]
    while 1:
        b = []
        num = 1
        for i in a:
            if isinstance(i, Iterable):  # 检测含有可迭代类型,则将i中子元素添加到b,相当于去掉一个[]
                num = 0
                for j in i:
                    b.append(j)
            else:
                b.append(i)
        a = b  # 赋值给a,继续检测是否含有可迭代类型
        if num:  # 逐一检测a,若num=1,标明a中没有可迭代类型,完成检测
            break
    print(b)
  • 相关阅读:
    [BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并)
    【匈牙利算法模板】BZOJ1191-超级英雄
    【线段树/区间开平方】BZOJ3211-花神游历各国
    【无源汇有上下界可行流】ACdream1211-Reactor Cooling
    【KMP求最小周期】POJ2406-Power Strings
    【KMP模板】POJ3461-Oulipo
    【费用流】BZOJ1877[SDOI2009]-晨跑
    【最大权闭合子图】BZOJ1497[NOI2006]-最大获利
    【最大流/费用流】BZOJ1834-[ZJOI2010]network 网络扩容
    【Trie图+DP】BZOJ1030[JSOI2007]-文本生成器
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/10093203.html
Copyright © 2020-2023  润新知