zoukankan      html  css  js  c++  java
  • 字符串 列表 元组 字典 集合3.2字符串切片

    一、是什么

    较为官方的说法:切片是指对操作的对象截取其中一部分的操作

    通俗来说:一种能够从数据中取到一部分数据的方式

    例如,

    有一个字符串"abcdef",我们可以通过切片取到"cde"

    切片不仅可以在字符串中应用,还可以对列表、元组等进行操作,简言之“切片”功能很重要。

    本节课我们以字符串为例讲解“切片”

    二、怎样用

    1. 语法

    [起始:结束:步长]
    

      

    注意

    • 选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔
    • 默认“步长”为1,即取完一个下标的数据之后,第二个下标的是在刚刚下标基础上+1
    • 步长为正数,表示从左向右取数据
    • 步长为负数,表示从右向左取数据

    2. 示例

    demo1

    name = 'abcdef'
    print(name[0:3])  # 取下标为0、1、2的字符,注意取不到下标为3的空间
    

      

    运行结果:

    abc
    

      

    说明:

    image-20200831095157818

    demo2

    name = 'abcdef'
    print(name[:3])  # 取下标为0、1、2的字符,注意取不到下标为3的空间
    

      

    运行结果:

    abc
    

      

    说明:

    image-20200831100743272

    demo3

    name = 'abcdef'
    print(name[3:5])  # 取 下标为3、4 的字符
    

      

    运行结果:

    de
    

      

    说明

    image-20200831100905082

    demo4

    name = 'abcdef'
    print(name[2:])  # 取 下标为2开始到最后的字符
    

      

    运行结果:

    cdef
    

      

    说明:当没有写截至下标时,默认到最后(包含)

    image-20200831101024891

    demo5

    name = 'abcdef'
    print(name[1:-1])  # 取 下标为1开始 到 右侧第2个字符 之间的所有字符
    

      

    运行结果:

    bcde
    

      

    说明:

    image-20200831101311788

    demo6

    name = 'abcdef'
    print(name[1:5:2])
    

      

    运行结果:

    bd
    

      

    说明:

    image-20200831101810493

    demo7

    name = 'abcdef'
    print(name[5:1:-1])
    

      

    运行结果:

    fedc
    

      

    说明

    image-20200831102405526

    demo8

    name = 'abcdef'
    print(name[5:1:-2])
    

      

    运行结果:

    fd
    

      

    说明

    image-20200831102725861

    demo9

    name = 'abcdef'
    print(name[::1])
    

      

    运行结果:

    abcdef
    

      

    说明

    image-20200831103041625

    demo10

    name = 'abcdef'
    print(name[::])
    

      

    运行结果:

    abcdef
    

      

    说明:

    • 开始位置、结束位置都未指定,且步长也未指定那么步长用默认的1,则此时从最左取到最右

    demo11

    name = 'abcdef'
    print(name[::-1])
    

      

    运行结果:

    fedcba
    

      

    说明:

    • 开始位置、结束位置都未指定,步长为-1,此时从最右取到最左

    demo12

    name = 'abcdef'
    print(name[::-2])
    

      

    运行结果:

    fdb
    

      

    说明

    • 开始、结束位置都未指定,且步长是-2,那么就意味着从右侧往左取数据,且步子长度为2(即隔一个取一个)

    三、练习

    给定一个字符串s, 请反转字符串

    s = 'Hello World!'
    
    print(s[4])
    
    print(s)
    
    print(s[:]) # 取出所有元素(没有起始位和结束位之分),默认步长为1
    
    print(s[1:]) # 从下标为1开始,取出 后面所有的元素(没有结束位)
    
    print(s[:5])  # 从起始位置开始,取到 下标为5的前一个元素(不包括结束位本身)
    
    print(s[:-1]) # 从起始位置开始,取到 倒数第一个元素(不包括结束位本身)
    
    print(s[-4:-1]) # 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身)
    
    print(s[1:5:2]) # 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)
    
    # python 字符串快速逆序
    print(s[::-1])  # 从后向前,按步长为1进行取值
    

      

    四、总结

    • 切片使用规则中,要么一个冒号[开始位置:结束位置],要么两个冒号[开始位置:结束位置:步长]
    • 不写步长时,默认为1
    • 步长为正数,表示从左向右取数据
    • 步长为负数,表示从右向左取数据
    • 当开始位置、结束位置都没有设定时,要看步长,如果步长为正数此时开始位置理解为最左 结束位置为最右,如果步长为负数此时开始位置理解为最右 结束位置为最左
  • 相关阅读:
    剑指offer:面试题25、二叉树中和为某值的路径
    剑指offer:面试题24、二叉搜索树的后续遍历序列
    剑指offer:面试题23、从上往下打印二叉树
    剑指offer:面试题22、栈的压入、弹出序列
    剑指offer:面试题21、包含min函数的栈
    剑指offer:面试题20、顺时针打印矩阵
    剑指offer:面试题19、二叉树的镜像
    剑指offer:面试题18、树的子结构
    剑指offer:面试题17、合并两个排序的链表
    剑指offer:面试题16、反转链表
  • 原文地址:https://www.cnblogs.com/dong4716138/p/15667708.html
Copyright © 2011-2022 走看看