• 转载:索引与分片 plus


     

    [Python笔记]序列(一)索引、分片

     

    Python包含6种内建序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。
    这些序列支持通用的操作:

    • 索引

    索引是从0开始计数;当索引值为负数时,表示从最后一个元素(从右到左)开始计数。这里列举几个例子:

    #字符串字面值可以直接使用索引,不需要专门的变量引用
    >>> 'Hello World!'[0]
    'H'
    >>> 'Hello World!'[11]
    '!'
    #注意越界
    >>> 'Hello World!'[12]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    #表示右边第一个
    >>> 'Hello World!'[-1]
    '!'
    >>> 'Hello World!'[-11]
    'e'
    #注意越界
    >>> 'Hello World!'[-12]
    'H'
    >>> 'Hello World!'[-13]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    
    • 分片

    分片用于截取某个范围内的元素,通过:来指定起始区间(左闭右开区间,包含左侧索引值对应的元素,但不包含右测索引值对应的元素。有几种典型的使用方法,参考举例:

    #注意不包括右边索引值对应的元素
    >>> num = [1,2,3,4,5,6,7,8,9,10]
    >>> num[3]
    4
    >>> num[6]
    7
    >>> num[3:6]
    [4, 5, 6]
    #留意右边边界
    >>> num[3:9]
    [4, 5, 6, 7, 8, 9]
    #右边越界,刚好是10对应的下一个索引值
    >>> num[3:10]
    [4, 5, 6, 7, 8, 9, 10]
    #右边越界
    >>> num[3:11]
    [4, 5, 6, 7, 8, 9, 10]
    
    #注意是不包含最后一个元素的
    >>> num[-3:-1]
    [8, 9]
    >>> num[-4:-1]
    [7, 8, 9]
    >>> num[-10:-1]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #注意右边界
    >>> num[-10:0]
    []
    >>> num[-5:-1]
    [6, 7, 8, 9]
    
    #注意右边界
    >>> num[-5:]
    [6, 7, 8, 9, 10]
    >>> num[-5:1]
    []>>> num[3:1]
    []
    >>> num[3:-1]
    [4, 5, 6, 7, 8, 9]
    
    #取最右3个元素
    >>> num[-3:]
    [8, 9, 10]
    
    #取最左3个元素
    >>> num[:3]
    [1, 2, 3]
    
    #可以加入step length
    >>> num[1:10:3]
    [2, 5, 8]
    >>> num[0:10:3]
    [1, 4, 7, 10]
    
    #起始位置默认为最左和最右,但不包括最右的元素
    >>> num[::2]
    [1, 3, 5, 7, 9]
    >>> num[0:9:1]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> num[0:10:1]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    #如果step length为0,会报错,也就是说步长不可以为0
    >>> num[1:5:0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: slice step cannot be zero
    
    #如果步长为负数,表示从右向左提取元素
    #注意不包括6对应的元素
    num[10:6:-1]
    [10, 9, 8]
    
    #倒序输出
    >>> num[10::-1]
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    
    #从最左边开始
    >>> num[:-3:1]
    [1, 2, 3, 4, 5, 6, 7]
    >>> num[:3:1]
    [1, 2, 3]
    #从最右边开始
    >>> num[:3:-1]
    [10, 9, 8, 7, 6, 5]

    要点:分片包括起始索引对应的元素,但不包括终止索引对应的元素。如果索引值为负值,则表示从最右边元素开始,需避免索引越界。

    • '+'运算

    表示两个序列的相连,但是仅允许相同类型的序列才能进行连接操作。举例:

    #列表
    >>> [1,2,3] + [3,2,1]
    [1, 2, 3, 3, 2, 1]
    #字符串
    >>> 'Hi' + ',' + 'Baby'
    'Hi,Baby'
    #元组(tuple)
    >>> ('This','is','a') + ('test','case')
    ('This', 'is', 'a', 'test', 'case')
    #如果序列类型不一致,则会报错
    >>> 'Hi' + [1,2]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: cannot concatenate 'str' and 'list' objects

    小结:序列支持‘+’运算,表示两个相同类型的序列的连接。

    • '*'运算

    '*'运算表示生成一个元素重复多次的序列,举例:

    >>> 'hi '*5
    'hi hi hi hi hi '
    >>> "hello" * 3
    'hellohellohello'
    >>> (1,2,3) * 4
    (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
    >>> [1,2,3] * 4
    [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
    #支持none
    >>> [None]*10
    [None, None, None, None, None, None, None, None, None, None]
    #支持交换律
    >>> 4 * [1,2,3]
    [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

    乘法表示将序列重复N次以生成一个新的序列,可以用None进行初始化一个序列。

  • 相关阅读:
    获取dbf中的表名
    dbf 工程模式连接(vfp c# )
    SQL Server插入中文数据出现乱码问题
    给老婆写的带返回的2048(数据库存储)
    BundleConfig包含js,css失败
    (wp8.1开发)添加数据(SQLite)库到app
    (wp8.1开发)触摸键从推出变返回
    java基础-jdk工具包
    java基础-开发工具IDEA
    java高级-动态注入替换类Instrumentation
  • 原文地址:https://www.cnblogs.com/python1988/p/9978709.html
Copyright © 2020-2023  润新知