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))
正值idx012...len(a)-3len(a)-2len(a)-1
负值idxr0-len(a)1-len(a)2-len(a)...-3-2-1

以a=[0, 1, 2, 3, 4]为例说明:

  1. 结束位置j不包含在返回在的list中,
    a[1:2]只包含一个元素a[1],
    a[1:1]返回空数组[];
  2. j和k都可以省略,但i和j中间的冒号不能省略,
  3. j和k中间的冒号(在k不声明时)可以省略。
  4. list的idx值不能超出list的索引范围,比如a[5]会报告list idx out of range;
  5. i可以超出索引范围,返回空数组;比如a[5:],a[-6::-1];
  6. j可以超出索引范围,超出的范围不做处理;比如a[3:6]返回[3,4],a[-2:6]返回[3,4](a[-2]即a[3]);
  7. 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]为例)

  1. 替换元素(k==1时):
>>> a[0:2] = [‘a’, ‘b’, ‘c’]  
>>> a  
[‘a’, ‘b’, ‘c’, 2, 3, 4]  

说明:将第0~1个元素替换为[‘a’, ‘b’, ‘c’], 注意:k=1时,切片元素数目和替换元素数目可以不相等。

  1. 删除元素(k==1时):
>>> a[0:2] = []  
>>> a  
[2, 3, 4]  

说明:删除第0~1个元素;也可以写成a[0:2] = ‘’或a[0:2]={}, 但不能写成a[0:2]=None,会报告TypeError;

  1. 替换元素(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,切片元素数和替换元素数不相等也会报错;

  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’  
原文地址:https://www.cnblogs.com/gaiqingfeng/p/13254179.html