python——切片的赋值问题

切片赋值?

今天突然看到一个很有趣的问题,是将一个列表的切片进行了赋值,比如

a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
a[2:4] = [***]

这样的形式。
当我看到答案的时候还真愣了一下,今天来总结一波。

先说明两个问题:

  1. 对一个切片进行整体赋值是可以影响原列表的,但如果是只改变一个元素,是不会有影响的。
    在这里插入图片描述
    (这个问题实际上是可变不可变类型的问题,你换一个可变类型的元素,修改一下他就不会变了。b的指针位置和a是相同的,但是有一个位置的索引发生了改变,但a没有发生改变)
  2. 我们对一个 切片赋值是一定要给一个列表的,你整一个元素上去,玩呢?

看我操作

from icecream import ic
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
ic(a[2:4])
'''ic| a[2:4]: ['b', 'b']'''

# 先来一个等长的,这个好说就是直接替换么
a[2:4] = ['1', '2']
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', '1', '2', 'y', 'y', 'd', 's'], 直接替换'''

# 来一个不等长的
a[5:] = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 'b', 'b', 'y', 'x', 'y', 'b', 'b', 'y', 'y', 'd', 's'], 
从5开始直接替换,多的补上'''

# 如果不等长的在中间呢
a[2:4] = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 'x', 'y', 'b', 'b', 'y', 'y', 'd', 's', 'y', 'y', 'd', 's'], 
将2、3替换掉,还是多的补在位置的后面'''

# 其实这个时候,短的已经能猜到了吧
a[2:] = [1, 2]
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 1, 2], 直接替换,少的不管'''

# 短的在中间
a[2:6] = [1, 2]
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 1, 2, 'd', 's'], 2~5替换,剩下不管,少了就少了'''

# 特殊一点,就是空对空
a[2:2] = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 'x', 'y', 'b', 'b', 'y', 'y', 'd', 's', 'b', 'b', 'y', 'y', 'd', 's'],
相当于是插入'''

a[2:4] = []
ic(a)
a = ['x', 'y', 'b', 'b', 'y', 'y', 'd', 's']
'''ic| a: ['x', 'y', 'y', 'y', 'd', 's'], 相当于是删除'''

其实这看来设计也很明显了,还是根据你切片选中的元素来进行替换,如果替换的内容少就直接删除,多就直接在后面填上,如果是空,就相当于是删除和插入。
([2:2]为啥是空不用多说了吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值