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

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM