python list巢狀的切片,規律難以理解

2021-08-20 09:25:51 字數 1594 閱讀 1881

一維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切片最好不要用

python List 切片總結

a 1,3,4,2,a d print a 1 a 1,3,4,2,a d print a 3 1 2,4,3,1 語法 start stop step step代表切片步長 切片區間為 start,stop 包含start但不包含stop 1.step 0,從左往右切片 2.step 0,從右往左...

學習筆記 Python List切片方法

初始化一列表如下 a 1,2,3,4,5,6,7,8,9,10 對列表進行一系列切片操作以及對應操作的輸出 print a 4 取前4個元素 1,2,3,4 print a 3 取第三個元素之後的所有元素 4,5,6,7,8,9,10 print a 3 a 3 相當於a 3 預設步長為1 4,5,...

python list的簡單命令

1.修改 或者說是替換,可以用函式replace實現 def text,word text text.split if word in text text.replace word,len word text join text return text 是乙個把text內出現特定word時,替換成 ...