python学习笔记20:序列
列表、元组、字符串都是序列,序列有两个主要操作:索引、切片。
1. 索引操作(抓取一个元素):
>>> shop_list[n]# 取第n个元素
>>> shop_list[-1] # 取最后一个元素
>>> shop_list[-2] # 取倒数第二个元素
2 list切片操作(抓取多个元素)
2.1 语法
a=[0, 1, 2, 3, 4]
a[i:j:k]
2.2 参数
切片参数 | 说明 | 默认值(k>0) | 默认值(k<0) |
---|---|---|---|
i | 起始位置 | 0 | -1 |
j | 结束位置 | len(a) | -1-len(a) |
k | 步长 | 1 | 1 |
正负索引值的关系:如果一个元素的正索引为idx,则该元素对应的负索引值idxr = idx-len(a)
正/负 | 序号 | 索引值(idxr=idx-len(a)) | ||||||
---|---|---|---|---|---|---|---|---|
正值 | idx | 0 | 1 | 2 | ... | len(a)-3 | len(a)-2 | len(a)-1 |
负值 | idxr | 0-len(a) | 1-len(a) | 2-len(a) | ... | -3 | -2 | -1 |
以a=[0, 1, 2, 3, 4]为例说明:
- 结束位置j不包含在返回在的list中,
a[1:2]只包含一个元素a[1],
a[1:1]返回空数组[]; - j和k都可以省略,但i和j中间的冒号不能省略,
- j和k中间的冒号(在k不声明时)可以省略。
- list的idx值不能超出list的索引范围,比如a[5]会报告list idx out of range;
- i可以超出索引范围,返回空数组;比如a[5:],a[-6::-1];
- j可以超出索引范围,超出的范围不做处理;比如a[3:6]返回[3,4],a[-2:6]返回[3,4](a[-2]即a[3]);
- j可以超出i的范围(k>0时,j<i,或k<0时,j>i),返回值为空数组[];比如a[3:1],a[-2:-4],a[-4,-2,-1];
2.3 取元素操作
(以a=[0, 1, 2, 3, 4]为例)
>>> a[1:4] # [1, 2, 3],第1到第3个元素,不包含第4个元素;
>>> a[2:] # [2, 3, 4],第2到最后一个元素;
>>> a[2:len(a)] # [2, 3, 4],同a[2:];
>>> a[2:-1] # [2, 3], 第2到倒数第2个元素,注意不包含a[-1];
>>> a[:3:2] # [0, 2], 第0~2个元素,每两个元素取一个。
>>> a[:] # [0, 1, 2, 3, 4],所有元素;
>>> a[::2] # [0, 2, 4], 所有元素,每两个元素取一个;
>>> a[::-1] # [4, 3, 2, 1, 0],逆序list;
>>> for e in a[::-1]: # 通过将k置为-1,逆序操作list;
... print(e)
2.4 替换/删除元素操作
(a=[0, 1, 2, 3, 4]为例)
- 替换元素(k==1时):
>>> a[0:2] = [‘a’, ‘b’, ‘c’]
>>> a
[‘a’, ‘b’, ‘c’, 2, 3, 4]
说明:将第0~1个元素替换为[‘a’, ‘b’, ‘c’], 注意:k=1时,切片元素数目和替换元素数目可以不相等。
- 删除元素(k==1时):
>>> a[0:2] = []
>>> a
[2, 3, 4]
说明:删除第0~1个元素;也可以写成a[0:2] = ‘’或a[0:2]={}, 但不能写成a[0:2]=None,会报告TypeError;
- 替换元素(k!=1时,包括k==-1的情况):
>>> a[0::2] = [‘a’, ‘b’, ‘c’]
>>> a
[‘a’, 1, ‘b’, 3, ‘c’]
说明:将第0,2,4个元素替换为[‘a’, ‘b’, ‘c’] 注意,k!=1时,如果切片元素数和替换元素数不相等会报错。
>>> a[0::2] = [] # k!=1,切片元素数与替换元素数不相等,报错;
ValueError: attempt to assign sequence of size 0 to extended slice of size 3
>>>
>>> a[-4:-6:-1] = [‘a’, ‘b’, ‘c’] # 报错,k==-1时也要求替换数目相等
ValueError: attempt to assign sequence of size 3 to extended slice of size 2
说明:即使k=-1,切片元素数和替换元素数不相等也会报错;
- 反向替换(k==1 或 k==-1时):
>>> a[-3:-6:-1] = ['a', 'b', 'c']
>>> a
['c', 'b', 'a', 3, 4,]
说明:将第2~0(-3, -4, -5)个元素替换为['a', 'b', 'c'],反映到a中,'a''b''c'出现的次序会反向;
5.反向替换(k!=1时):
>>> a[::-2] = ['a', 'b', 'c']
['c', 1, 'b', 3, 'a']
说明:第0, 2, 4 (-1,-3,-5)个元素替换为['a', 'b', 'c']
3. str切片操作
>>> name = ‘swaroop’
>>> name[1:3] # ‘wa’
>>> name[2] # ‘a’
>>> name[1:-1] # ‘waroo’, 不包括最后一个元素‘p’
>>> name[:] # ‘swaroop’