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