• python如何删除二维或者三维数组/列表中某维的空元素


    如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题。

     

    一.首先来看一下三维数组/列表的结构

    仔细看下图就会很清楚了:

    轴0即是去除第一个外括号后第一层(我把它称做第一维)有四大块;

    对轴1则是对每一块来说,去掉大块的括号后的四小横条(我把它称作第二维);

    对轴2则是对每一条来说,去掉小条的括号后的每一个数(从外往里数第三层括号,我就叫做第三维)

        

     

    二.代码

    1.删除二维数组中为空的元素则比较简单:

    oldlist=[[1, 1, 1, 1, 1],  [1, 1, 1, 1, 2],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], [] , []]
    newlist=[x for x in oldlist if x] #删除空列表[]
    print(newlist)

    结果如下:

    [[1, 1, 1, 1, 1],  [1, 1, 1, 1, 2],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16]]

     

    2.(延伸)对三维数组

    代码中我们用的三维数组如下:

    [ [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16], [], []],
      [[111], [333], [444]], 
      [], 
      []  ]

    其中第一维和第二维都设置了为空的元素

     

    删除三维列表中第二维为空的元素,代码如下:

    #1.删除三维列表中第二维为空的元素
    oldlist=[[[1, 1, 1, 1, 1],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], []],  [[111], [333], [444]],[],[]]
    new1=[]
    new2=[]
    def dellist(oldlist):
        for sam in oldlist:
            new1 = []
            for x in sam:
                if x:
                    new1.append(x)
            new2.append(new1)
        return new2
    
    
    print(dellist(oldlist))

    结果如下:

    [ [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16]], [[111], [333], [444]], [], []]
    

     

    若要想把第一维也为空的元素耶删除,加上一行即可:

    oldlist=[[[1, 1, 1, 1, 1],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], []],  [[111],[333],[444]],[],[]]
    new1=[]
    new2=[]
    def dellist(oldlist):
        for sam in oldlist:
            if sam:
                new1 = []
                for x in sam:
                    if x:
                        new1.append(x)
                new2.append(new1)
        return new2
    
    print(dellist(oldlist))

    结果如下:

    [  [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16]], 
       [[111], [333], [444]]  ]

     

    觉得我的博客对你有用的话请点个赞哦!

  • 相关阅读:
    ●BZOJ 2752 [HAOI2012]高速公路(road)
    ●UVA 11021 tunnello
    ●POJ 2794 Double Patience
    【51Nod1555】布丁怪
    【LG1600】[NOIP2016]天天爱跑步
    【LG5171】Earthquake
    【LG4437】[HNOI/AHOI2018]排列
    【CF1097F】Alex and a TV Show
    【51Nod 1769】Clarke and math2
    【LG5330】[SNOI2019]数论
  • 原文地址:https://www.cnblogs.com/yh-blog/p/10588208.html
Copyright © 2020-2023  润新知