python list巢狀的切片,規律難以理解
阿新 • • 發佈:2019-01-25
一維python list的切片沒有問題。
可是巢狀list也就是多維的切片,規律就難以理解,目前還沒找到規律,請看下面的程式碼:
def printm1m2(): print( m1 ) print( m2 ) m1 = [[1,2,3,4],[21,22,23,24] , [31,32,33,34]] m2 = [[100,200,300,400] , [101,201,301,401]] printm1m2() print("list embeded slice") m2=m1[1:][0:] print("m1[1:][0:]" , m2 ) m2=m1[1:][1:] print("m1[1:][1:]" , m2 ) m2=m1[0:][1:] print("m1[0:][1:]" , m2 ) #del m1[2] m2[0][0] = 81100 m2[1][0] = 11100 printm1m2() print("list embeded slice") m1=[1,2,3,4] m2=[10,20,30] printm1m2() m1=m2[1:3] ; m2[2] = 34 printm1m2() m1 = m2 m2[1] = 56 printm1m2()
請看輸出:
[[1, 2, 3, 4], [21, 22, 23, 24], [31, 32, 33, 34]] [[100, 200, 300, 400], [101, 201, 301, 401]] list embeded slice m1[1:][0:] [[21, 22, 23, 24], [31, 32, 33, 34]] m1[1:][1:] [[31, 32, 33, 34]] m1[0:][1:] [[21, 22, 23, 24], [31, 32, 33, 34]] [[1, 2, 3, 4], [81100, 22, 23, 24], [11100, 32, 33, 34]] [[81100, 22, 23, 24], [11100, 32, 33, 34]] list embeded slice [1, 2, 3, 4] [10, 20, 30] [20, 30] [10, 20, 34] [10, 56, 34] [10, 56, 34]
m1[1:][0:] 和m1[0:][1:] 的輸出結果竟然是一樣的,這很顯然和我們通常的認知不一樣。
一維陣列(單list無巢狀),切片後產生的list是新的,是不同的例項。而二維陣列整體切片後,被切片的陣列和切片生成的陣列是同一個東西,只是名字不一樣,和一個list賦值給另一個list效果一樣。這個可以從第一個
list embeded slice
之後的輸出看出來。
總之,多維list切片最好不要用