python list嵌套的切片,规律难以理解

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



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值