栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对整个列表进行切片的切片分配与直接分配之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对整个列表进行切片的切片分配与直接分配之间有什么区别?

a_list = ['foo', 'bar']

list
在内存中创建一个新名称
a_list
,并指向该名称。
a_list
前面所指的是无关紧要的。

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

调用对象的

__setitem__
方法,
a_list
以a
slice
作为索引,并
list
在内存中创建一个新值作为值。

__setitem__
评估
slice
以确定它代表什么索引,并调用
iter
它传递的值。然后,它会在对象上进行迭代,将所指定范围内的每个索引设置为该对象
slice
的下一个值。对于
list
s,如果由所指定的范围
slice
的长度与可迭代的长度不同,则将
list
调整的大小。这使您可以做很多有趣的事情,例如删除列表的各个部分:

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

但是,对于“ extended slices”,如果

step
不能为1,则可迭代的长度必须正确:

>>> lst = [1, 2, 3]>>> lst[::2] = []Traceback (most recent call last):  File "<interactive input>", line 1, in <module>ValueError: attempt to assign sequence of size 0 to extended slice of size 2

切片分配的主要不同之处在于

a_list

  1. a_list
    必须已经指向一个对象
  2. 该对象被修改,而不是指向
    a_list
    新对象
  3. 这个对象必须支持
    __setitem__
    slice
    指数
  4. 右边的对象必须支持迭代
  5. 没有名称指向右边的对象。如果没有其他引用(例如,如您的示例中的文字所示),则在迭代完成后,该引用将不存在。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号