zoukankan      html  css  js  c++  java
  • 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’  
    
  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/13254179.html
Copyright © 2011-2022 走看看