python序列(五)切片操作
2024-10-18 18:47:13
功能:截取列表中的任何部分。
切片适用于列表、元组、字符串、range对象等类型。。
格式:[::]切片使用两个冒号分隔的3个数字来完成。
第一个数字表示切片开始位置(默认为0)。
第二个数字表示切片截止(但不包含)位置(默认为列表长度)。
第三个数字表示切片的步长(默认为1),当步长省略是可省略最后一个冒号。
1.切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表。
>>> alist=[1,2,3,4,5,6,7,8,9,0,]
>>> alist[::] #返回包含元素的新列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> alist[::-1] #逆序的所有元素
[0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> alist[::2] #偶数位置,隔一个取一个
[1, 3, 5, 7, 9]
>>> alist[1::2] #奇数位置,隔一个取一个
[2, 4, 6, 8, 0]
>>> alist[3::] #从下标3开始的所有元素
[4, 5, 6, 7, 8, 9, 0]
>>> alist[3:6] #下标在[3,6]之间的所有元素
[4, 5, 6]
>>> alist[0:100:1] #前100个元素,自动截断
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> a[100:] #下标100之后的所有元素,自动截断
[]
>>> x[100] #直接使用下标访问会发生越界
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
x[100]
IndexError: list index out of range
2.可以使用切片来原地修改列表内容
>>> alist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> alist[len(alist):]=[9] #在尾部追加元素
>>> alist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9]>>> alist[:3]=[3,2,1] #替换前三个元素
>>> alist
[3, 2, 1, 4, 5, 6, 7, 8, 9, 0, 9]
>>> alist[:3]=[] #删除前三个元素
>>> alist
[4, 5, 6, 7, 8, 9, 0, 9]
>>> alist=list(range(10))
>>> alist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[::2]=[0]*5 #替换偶数位置上的元素
>>> alist
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9]
>>> alilst[::2]=[0]*3 #切片不连续,两个元素个数必须一样多
Traceback (most recent call last):
File "<pyshell#153>", line 1, in <module>
alilst[::2]=[0]*3
NameError: name 'alilst' is not defined
3.使用del与切片结合来删除列表元素
>>> alist=[3,4,5,6,7,]
>>> del alist[:3] #删除前三个元素
>>> alist
[6, 7]
>>> alist=[3,4,5,6,7]
>>> del alist[::2] #删除偶数位置上的元素
>>> alist
[4, 6]
4.切片返回的是列表元素的浅复制
>>> alist=[3,5,7]
>>> blist=alist
>>> blist
[3, 5, 7]
>>> blist[1]= 8
>>> alist
[3, 8, 7]
>>> alist==blist
True
>>> alist is blist
True
>>> id(alist)
2848177707136
>>> id(blist)
2848177707136
5.浅复制是把原列表中所有元素的引用都复制都信列表中
原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据,一般是没有问题的。
原列表中包含列表之类的可变数据类型,由于浅复制是只是把子列表的引用复制到新列表中,修改任何一个都会影响另外一个。
>>> alist=[1,2,3]
>>> blist=alist[::] #切片,浅复制
>>> alist==blist #两个列表的元素完全一样
True
>>> alist is blist #但不是同一个对象
False
>>> id(alist)==id(blist) #内存地址不一样
False
>>> blist[1]=8 #修改一个不会影响另一个
>>> blist
[1, 8, 3]
>>> alist
[1, 2, 3]
最新文章
- 【Java大系】Java快速教程
- Oracle 语法
- Javascript模块化编程(一):模块的写法(转)
- 创建SO bapi
- EF架构~在T4模版中为所有属性加默认值
- Qt 2D绘图 渐变填充(三种渐变方式)
- 如何选择linux 版本
- CodeForces 702 A Maximum Increase (贪心,高效算法)
- PostgreSQL的 initdb 源代码分析之十二
- devStack for Openstack dev Env
- Oracle + EF5 疑难杂症
- Spring IOC之基于注解的容器配置
- 阅读《大道至简第一章》读后感(java伪代码)
- js变量数组
- ionic3 环境配置 + 運行第一個項目
- 安卓Eclipse如何快速修改工程名及包名
- vim编辑器显示行号
- June. 20 2018, Week 25th. Wednesday
- 查看swap占用情况
- 如何在debug vue-cli建立的项目
热门文章
- Matlab 补充知识
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
- Linux(Ubuntu16.04)下的MediaWiki的部署启动
- 自动化运维工具之Puppet变量、正则表达式、流程控制、类和模板
- Vue+EasyPOI导出Excel(带图片)
- 2016 ACM/ICPC ECNA Regional I.Waif Until Dark(最大流)
- linux 解压缩文件(tar和zip)
- numpy 中的堆叠 stack
- P5327 [ZJOI2019]语言
- AcWing&;#160;127.&;#160;任务