如題,我的在使用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]] ]
以爲個人博客對你有用的話請點個贊哦!