• Python学习--字符串slicing


    Found this great table at http://wiki.python.org/moin/MovingToPythonFromOtherLanguages

    Python indexes and slices for a six-element list.
    Indexes enumerate the elements, slices enumerate the spaces between the elements.
    
    Index from rear:    -6  -5  -4  -3  -2  -1      a=[0,1,2,3,4,5]    a[1:]==[1,2,3,4,5]
    Index from front:    0   1   2   3   4   5      len(a)==6          a[:5]==[0,1,2,3,4]
                       +---+---+---+---+---+---+    a[0]==0            a[:-2]==[0,1,2,3]
                       | a | b | c | d | e | f |    a[5]==5            a[1:2]==[1]
                       +---+---+---+---+---+---+    a[-1]==5           a[1:-1]==[1,2,3,4]
    Slice from front:  :   1   2   3   4   5   :    a[-2]==4
    Slice from rear:   :  -5  -4  -3  -2  -1   :
                                                    b=a[:]
                                                    b==[0,1,2,3,4,5] (shallow copy of a)



    In python 2.7

    Slicing in python

    [a:b:c]

    len = length of string, tuple or list

    c -- default is +1. sign of c indicates forward or backward, absolute value of c indicates steps. Default is forward with step size 1. Positive means forward, negative means backward.

    a -- when c is positive or blank, default is 0. when c is negative, default is -1.

    b -- when c is positive or blank, default is len. when c is negative, default is -(len+1).

    Understanding index assignment is very important.

    In forward direction, starts at 0 and ends at len-1

    In backward direction, starts at -1 and ends at -len

    when you say [a:b:c] you are saying depending on sign of c (forward or backward), start at a and end at b ( excluding element at bth index). Use the indexing rule above and remember you will only find elements in this range

    -len, -len+1, -len+2, ..., 0, 1, 2,3,4 , len -1

    but this range continues in both directions infinitely

    ...,-len -2 ,-len-1,-len, -len+1, -len+2, ..., 0, 1, 2,3,4 , len -1, len, len +1, len+2 , ....

    e.g.

                 0    1    2   3    4   5   6   7   8   9   10   11         
                 a    s    t   r    i   n   g    
        -9  -8  -7   -6   -5  -4   -3  -2  -1

    if your choice of a , b and c allows overlap with the range above as you traverse using rules for a,b,c above you will either get a list with elements (touched during traversal) or you will get an empty list.

    One last thing: if a and b are equal , then also you get an empty list

    >>> l1
    [2, 3, 4]
    
    >>> l1[:]
    [2, 3, 4]
    
    >>> l1[::-1] # a default is -1 , b default is -(len+1)
    [4, 3, 2]
    
    >>> l1[:-4:-1] # a default is -1
    [4, 3, 2]
    
    >>> l1[:-3:-1] # a default is -1 
    [4, 3]
    
    >>> l1[::] # c default is +1, so a default is 0, b default is len
    [2, 3, 4]
    
    >>> l1[::-1] # c is -1 , so a default is -1 and b default is -(len+1)
    [4, 3, 2]
    
    
    >>> l1[-100:-200:-1] # interesting
    []
    
    >>> l1[-1:-200:-1] # interesting
    [4, 3, 2]
    
    
    >>> l1[-1:5:1]
    [4]
    
    >>> l1[-1:-1:1]
    []
    
    
    >>> l1[-1:5:1] # interesting
    [4]
    
    
    >>> l1[1:-7:1]
    []
    
    >>> l1[1:-7:-1] # interesting
    [3, 2]


  • 相关阅读:
    2020系统综合实践 第五次实践作业
    2020系统综合实践 第4次实践作业
    2020系统综合实践 第3次实践作业
    2020系统综合实践 第2次实践作业
    2020系统综合实践 第1次实践作业
    wireshark大作业——负载均衡
    第07组 Beta版本演示
    第07组 Beta冲刺(4/4)
    软工实践个人总结
    第03组 Beta冲刺(5/5)
  • 原文地址:https://www.cnblogs.com/feiling/p/3953210.html
Copyright © 2020-2023  润新知