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