zoukankan      html  css  js  c++  java
  • python之切片

    1.为什么要学习切片【切片是解决何种问题的?】

    (2)对于含有元素很少的list,我们遍历其前三个元素,通常可以这样来实现:

    #遍历list,取其中索引为【0】、【1】、【2】的元素:
    L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang']
    a = [L[0],L[1],L[2]]
    print(a)
    ------------------------------------------------------------------

    #运行结果:
    ['Xiaoming','Xiaohong','Xiaolan']
     

    (2)显然上述方法,对于取前N(若N很大)个元素的list来说,是比较麻烦的,可以通过循环来进行遍历:

    #使用循环遍历前3个元素:
    L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang']
    r = []
    n = 3
    for i in range(n):
        r.append(L[i])
    print(r)
    ----------------------------------------------------------------------------------------
    #打印结果:
    ['Xiaoming','Xiaohong','Xiaolan']

    虽然这种方法较第一种比较好了,但是对于经常取指定索引的操作,循环还是有点繁琐,因此python提供了切片(slice)操作符

    2.切片操作符解读

    #切片操作符的使用:
    L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang']
    print(L[0:3])
    ----------------------------------------------------------------------
    #运行结果:
    ['Xiaoming','Xiaohong','Xiaolan']
    
    ----------------------------------------------------------------------
    #含义解读:
    L[0:3]:表示从索引0开始,到索引3为止,但不包括索引3,也就是取索引[0] [1] [2]
    L[:3]:若第一个索引是[0],可以省略
    L[1:3]:从索引1开始取2个元素
    
    #切片还可以从倒数的位置开始取,记住倒数第一的数的索引位置是-1,例如:
    L[-2:]:取倒数两个元素
    L[-1:]:取倒数第一个元素
    L[-2:-1]:取倒数第一个元素
    ------------------------------------------------------------------------
    #间隔取:
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    #创建一个0-99的数列
    L = list(range(100))
    
    #取前10个数:
    print( L[:10] )
    ---->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #取后10个数:
    print( L[-10:] )
    ---->[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    #取前11-20个数字: print( L[10:20] ) ---->[10, 11, 12, 13, 14, 15, 16, 17, 18, 19] #取前10数,每两个取一个: print( L[:10:2] ) ---->[0, 2, 4, 6, 8]
    #所有数,每五个取一个: print( L[::5] ) ---->[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
    #只写[:]就是原样复制一个list: print( L[:] )

    3.其他知识

    (1)字符串'xxxx'也可以看成一种list,每个元素就是一个字符,可以用切片操作,操作结果认为字符串:

    #对字符串进行切片操作,取前三个字母
    a = 'abcdefg'[:3]
    print(a)
    
    #运行结果【仍为字符串】
    ---->abc

    (2)tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

    #对tuple进行切片操作
    t = (0,1,2,3,4,5,6,7,8)[:4]
    print(t)
    
    #运行结果:
    ---->(1,2,3,4)

    4.练习【利用切片操作,实现一个trim()函数,去除字符串首尾的空格】

    思路:有以下几种情况:

    (1)空字符串  、(2)首尾均无空格:通过if进行匹配并返回字符串本身:

     if(s == '' or (s[0:1]!=' ' and s[-1:]!=' ')): #判断是否是(1) (2)情况,若是返回本身
            return s

    (3)字符串段首有空格:

    elif s[0:1]==' ':#判断是否属于(3)情况,若是利用迭代,逐一切片
        return trim(s[1:])

    (4)字符串段尾有空格:

    else :            #判断是否属于(4)情况,若是利用迭代,逐一切片
        return trim(s[:-1] )

    (5)首尾均有空格:先匹配情况(3)、然后匹配情况(4)

    完整代码:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    def trim(s):
        if(s == '' or (s[0:1]!=' ' and s[-1:]!=' ')): #判断是否是(1) (2)情况,若是返回本身
            return s
        elif s[0:1]==' ':#判断是否属于(3)情况,若是利用迭代,逐一切片
            return trim(s[1:])
        else :            #判断是否属于(4)情况,若是利用迭代,逐一切片
            return trim(s[:-1] )
    
    a = trim('')
    b = trim('wang')
    c = trim('   wang')
    d = trim('wang   ')
    e = trim('  wang  ')
    f = trim(' ')
    print('a=',a)
    print('b=',b)
    print('c=',c)
    print('d=',d)
    print('e=',e)
    print('f=',f)
    
    -------------------------------------------------------------------------------
    #运行结果:
    ---->a= 
    ---->b= wang
    ---->c= wang
    ---->d= wang
    ---->e= wang
    ---->f= 
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/ilym/p/8316867.html
Copyright © 2011-2022 走看看