python如何刪除二維或者三維數組/列表中某維的空元素

如題,我的在使用python進行數據預處理過程當中出現的問題,抽象成刪除三維列表中某維爲空的問題。python

 

一.首先來看一下三維數組/列表的結構數組

仔細看下圖就會很清楚了:app

軸0便是去除第一個外括號後第一層(我把它稱作第一維)有四大塊;spa

對軸1則是對每一塊來講,去掉大塊的括號後的四小橫條(我把它稱做第二維);code

對軸2則是對每一條來講,去掉小條的括號後的每個數(從外往裏數第三層括號,我就叫作第三維)blog

    

 

二.代碼博客

1.刪除二維數組中爲空的元素則比較簡單:class

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)

結果以下:im

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

 

以爲個人博客對你有用的話請點個贊哦!

相關文章
相關標籤/搜索