Fork me on GitHub

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]]  ]

 

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

posted @ 2019-03-24 14:51  fnangle  阅读(10432)  评论(0编辑  收藏  举报