• 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= 
  • 相关阅读:
    asp.net membership 修改密码
    linq直接执行sql语句
    word-wrap,word-break,white-space,text-overflow的区别和用法
    ObjectQuery查询及方法
    HTML 标签的 enctype 属性
    【C#学习笔记】类构造函数使用
    【C#学习笔记】播放wav文件
    【C#学习笔记】类型转换
    【C#学习笔记】函数重载
    【C#学习笔记】读文件
  • 原文地址:https://www.cnblogs.com/ilym/p/8316867.html
Copyright © 2020-2023  润新知