python切片赋值_python – 切片整个列表和直接赋值的切片分配有什么区别?

a_list = ['foo', 'bar']

在内存中创建一个新列表,并将其命名为a_list。这是什么a_list指出以前是无关紧要的。

a_list[:] = ['foo', 'bar']

使用slice作为索引调用a_list对象的__setitem__方法,并在内存中创建一个新列表作为值。

__setitem__评估切片以确定它所代表的索引,并对其传递的值调用iter。然后,它迭代对象,将切片指定的范围内的每个索引设置为对象的下一个值。对于列表,如果由slice指定的范围与iterable的长度不同,则会调整列表的大小。这样,您可以执行一些有趣的事情,例如列表的删除部分:

a_list[:] = [] # deletes all the items in the list, equivalent to 'del a_list[:]'

或在列表中插入新值:

a_list[1:1] = [1, 2, 3] # inserts the new values at index 1 in the list

然而,对于“扩展片”,其中步骤不是一个,迭代必须是正确的长度:

>>> lst = [1, 2, 3]

>>> lst[::2] = []

Traceback (most recent call last):

File "", line 1, in

ValueError: attempt to assign sequence of size 0 to extended slice of size 2

切片分配到a_list的主要内容是:

> a_list必须已经指向一个对象>该对象被修改,而不是将a_list指向一个新对象>该对象必须支持具有切片索引的__setitem__>右边的对象必须支持迭代>没有任何名称指向右侧的对象。如果没有其他引用(例如当你的例子中是一个字面意思)时,在迭代完成之后它将被引用计数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值