• 7 切片及应用


    一、切片

    1.1 对list进行切片

    取一个list的部分元素是非常常见的操作。比如,一个list如下:

    L = ['Adam', 'Lisa', 'Bart', 'Paul']
    
    • 1

    取前3个元素,应该怎么做?
    笨办法:

    [L[0], L[1], L[2]]
    ['Adam', 'Lisa', 'Bart']
    
    • 1
    • 2

    之所以是笨办法是因为扩展一下,取前N个元素就没辙了。

    取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

    r = []
    n = 3
    for i in range(n):
    ...     r.append(L[i])
    ... 
    r
    ['Adam', 'Lisa', 'Bart']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

    对应上面的问题,取前3个元素,用一行代码就可以完成切片:

    L[0:3]
    ['Adam', 'Lisa', 'Bart']
    
    • 1
    • 2

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

    如果第一个索引是0,还可以省略:

    L[:3]
    ['Adam', 'Lisa', 'Bart']
    
    • 1
    • 2

    也可以从索引1开始,取出2个元素出来:

    L[1:3]
    ['Lisa', 'Bart']
    
    • 1
    • 2

    只用一个 : ,表示从头到尾:

    L[:]
    ['Adam', 'Lisa', 'Bart', 'Paul']
    
    • 1
    • 2

    因此,L[:]实际上复制出了一个新list。

    切片操作还可以指定第三个参数:

    L[::2]
    ['Adam', 'Bart']
    
    • 1
    • 2

    第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
    把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。

    1.2 倒序切片

    对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

    L = ['Adam', 'Lisa', 'Bart', 'Paul']
    L[-2:]
    ['Bart', 'Paul']
    
    L[:-2]
    ['Adam', 'Lisa']
    
    L[-3:-1]
    ['Lisa', 'Bart']
    
    L[-4:-1:2]
    ['Adam', 'Bart']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。

    1.3 对字符串切片

    字符串 'xxx’和 Unicode字符串 u’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

    'ABCDEFG'[:3]
    'ABC'
    'ABCDEFG'[-3:]
    'EFG'
    'ABCDEFG'[::2]
    'ACEG'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。
    Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

    二、练习题

    1. range()函数可以创建一个数列:
      range(1, 101)
      [1, 2, 3, …, 100]
      请利用切片,取出:
    • 前10个数;
    • 3的倍数;
    • 不大于50的5的倍数。
    L = range(1, 101)
    
    print L[:10]
    print L[2::3]
    print L[4:51:5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 利用倒序切片对 1 - 100 的数列取出:
    • 最后10个数;
    • 最后10个5的倍数。
    L = range(1, 101)
    print L[-10:]
    print L[-46::5]
    
    • 1
    • 2
    • 3
    1. 字符串有个方法 upper() 可以把字符变成大写字母:
    'abc'.upper()
    'ABC'
    
    • 1
    • 2

    但它会把所有字母都变成大写。请设计一个函数,它接受一个字符串,然后返回一个仅首字母变成大写的字符串。
    提示:利用切片操作简化字符串操作。

    def firstCharUpper(s):
        return s[0].upper()+s[1:]
    
    print firstCharUpper('hello')
    print firstCharUpper('sunday')
    print firstCharUpper('september')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    小结

    本文对Python中切片及其作用进行了介绍,切片可以截取想要的数据,是非常基础的功能。

  • 相关阅读:
    LeetCode 202 快乐数
    伯克利『全栈深度学习』2022最新课程;谷歌『基于Transformers的通用超参数优化』经验分享;动图编辑器;前沿论文 | ShowMeAI资讯日报
    你还不知道零基础如何入门网络安全(黑客)吗?
    旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript)
    14. 机器学习 - KNN & 贝叶斯
    学习加密(三)spring boot 使用RSA非对称加密,前后端传递参数加解密
    leetcode669. 修剪二叉搜索树(java)
    白话讲解UML的4大关系:关联关系、泛化关系、依赖关系、实现关系
    C++初阶 入门
    linux驱动34:tasklet小任务机制
  • 原文地址:https://blog.csdn.net/qq_59949081/article/details/134433338