Python:索引总结

发布时间:2019-09-12 07:55:01编辑:auto阅读(1632)

    Python包含6种内建序列:

    • 列表
    • 元组
    • 字符串
    • Unicode字符串
    • buffer对象
    • xrange对象

    索引

    #字符串可以直接使用索引,不需要专门的变量引用
    >>> 'Hello World!'[0]
    'H'
    >>> 'Hello World!'[11]
    '!'
    >>> 'Hello World!'[-1]
    '!'
    >>> 'Hello World!'[-11]
    'e'
    #注意以下情况会出现越界
    >>> 'Hello World!'[12]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    >>> 'Hello World!'[-12]
    'H'
    >>> 'Hello World!'[-13]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range

    负数索引与正数索引之间存在一个规律
    当正数索引+负数索引的绝对值=元素的个数,它们所指的是同一个元素。

    # Hello World!:总共有12个元素,含空格和标点符号
    print('Hello World!'[8]) # r
    print('Hello World!'[-4])# r

    分片

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

    #注意不包括右边索引值对应的元素,索引下标从0开始
    >>> 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 = [1,2,3,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]#或者 num[::-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]

    注意:数据的一些细微区别

    num = [1,2,3,4,5,6,7,8,9,10]
    num1 = num[-1] # 输出:10  type:int
    num2 = num[-1:]# 输出:[10] type:list

    总结:
      分片包括起始索引对应的元素,但不包括终止索引对应的元素,索引为正值时可以发生越界但只会取到最后一个元素。如果索引值为负值,则表示从最右边元素开始,此时需避免索引越界。


    ‘+’运算(网易笔试中的选择题)

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

    #列表
    >>> [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

    真题:

    var1 = (1,2,3)
    var2 = var1 * 2 # (1, 2, 3, 1, 2, 3)
    var3 = var2 + "4,5,6" #报错:  File "C:/Users/Dell/test1.py", line 22, in <module> var3 = var2 + "4,5,6" TypeError: can only concatenate tuple (not "str") to tuple
    var4 = var1 + (4,5,6) # (1, 2, 3, 4, 5, 6)

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


    ‘*’运算(乘)

    ‘*’运算表示生成一个元素重复多次的序列

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

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


关键字