Skip to content

Latest commit

 

History

History
427 lines (275 loc) · 8.54 KB

094-192294-列表_切片_slice_开始_结束.sy.md

File metadata and controls

427 lines (275 loc) · 8.54 KB
show version enable_checker
step
1.0
true

列表 - 切片 - slice

回忆

  • 上次了解了count的词源

图片描述

  • count是列表中的计数函数
  • 列表 还可以进行什么操作 吗?🤔

帮助

图片描述

  • 索引
    • 得到第 i 个元素
    • 中括号里有冒号是什么意思?

切片

  • 说是叫做切片(slice)
num_list = list(range(5))
num_list
  • 切片有两个端点
    1. 始点
    2. 结束点

图片描述

  • 前闭后开
    • 开始点是包括的
    • 结束点是不包括的
    • 前闭后开
    • 所以结果是[1, 2]
  • 究竟什么是切片呢?

直播视频切片

  • 直播3小时

图片描述

  • 切出其中的一段视频
    • 这就是视频切片

图片描述

  • 这个词怎么来的呢?

切片词源

  • 好几个单词同源
    • slit
    • slice
    • split
    • splinter
    • 都是撕裂切开

图片描述

  • 把一个整体切分成一个个切片

面包

图片描述

  • 就像切片面包
    • 切出其中一段

图片描述

  • 可以切得厚一点么?

切片

  • 可以像吃鱼一样吗

图片描述

  • 切头去尾?

切头

图片描述

  • 切头
    • 0可以省略

切头

char_list = list("oeasy")
char_list
char_list[0:3]
char_list[:3]
  • char[0:3]
    • 就是char_list[:3]
    • start如果为0可省
    • 从头开始

图片描述

  • 尾可省吗?

去尾

  • 由于切片数字要求是前闭后开

图片描述

尝试

char_list = list("oeasy")
char_list
char_list[2:5]
char_list[2:8]
char_list[2:]
  • 结束位置
    • 如果是列表长度
    • 或者大于等于长度
    • 或者省略
    • 都可以切下尾巴

图片描述

  • 中间怎么切呢?

切鱼

  • 还是像以前一样

图片描述

效果

char_list = list("oeasy")
char_list
char_list[1:3]
char_list[2:3]
char_list[2:4]
  • 控制
    • 开始点
    • 结束点
    • 前闭后开

图片描述

  • 如果字符串列表中 出现转义字符
    • 应该如何呢?

需要转义的字符

char_list = list("o\ne\tasy")
char_list[1]
char_list[4]
char_list[1:4]
  • 转义转义转换含义
    • 转义字符仍然是一个字符
    • 不影响索引和切片

图片描述

  • 切片支持负数作为端点吗?

尝试

num_list = list(range(5))
num_list
  • 对应序号

图片描述

  • 将负数当成正数来看就可以了
    • 但有一个问题

图片描述

  • 好像最后一片面包4
    • 就是拿不到?
  • 怎么办?🤔

松手

  • stop用正数可以解决问题

图片描述

  • 如果我就想用负数呢?

松手

  • 后面是一个开区间

    • 无论多么努力都是不包含在内的
  • 干脆松手

    • 反而得到了
    • 既然 stop 可以空

图片描述

  • 那么 start 可以空么?

  • 都可以空
    • 前面 空 就是要鱼头
    • 后面 空 就是要鱼尾
    • 前面后面 空 要整条
    • 空生万有

图片描述

  • 这个切片操作会对原来的列表有影响么?

列表切片

  • 列表的切片还是列表

图片描述

  • 列表不会因为切片而变化
  • 但如果我对切片赋值呢?

给切片赋值

图片描述

  • 影响切片就是在影响整个列表
  • 这过程中发生了什么呢?

过程

  • 用id观察地址
num_list = list(range(5))
print(num_list)
print(id(num_list))
num_list_slice = num_list[2:]
print(num_list[2:])
print(id(num_list[2:]))
num_list[2:] = [5, 6]
print(num_list[2:])
print(id(num_list[2:]))
print(num_list)
print(id(num_list))
  • 列表的地址没有变
    • 列表切片的地址也没有变

图片描述

  • 但是从l[2:]这个切片开始后面变了

移花接木

图片描述

num_list = list(range(5))
num_list[3:] = ['a', 'b']
num_list
  • 嫁接技术
    • 砧木是[0, 1, 2, 3, 4]
    • 接穗是['a', 'b']
    • 这是嫁接到尾巴上

图片描述

  • 可以在前面嫁接吗?

接在前面

num_list = list(range(5))
num_list[:3] = list("oeasy")
num_list
  • 尝试把前面换了

图片描述

  • 车头也可以换

图片描述

  • 换的时候数量不对等可以吗?

数量不对等

  • 车厢节数 不影响车厢对接过程

图片描述

  • 尾巴上修改也一样吗?

尾巴

num_list = list(range(5))
num_list[:2] = ["egg"]
  • 留下前两片
    • 后面加鸡蛋

图片描述

  • 可以夹着吃吗?

金枪鱼三明治

  • Tuna sandwich
    • 替换 找到中间面包

图片描述

  • 可以来个双层牛肉堡吗?

双层

  • 先来一层

图片描述

  • 再来一层

图片描述

  • 下面牛肉切的有点碎

新需求

  • 双层牛肉
    • 能否使用0、1 两片面包

图片描述

  • 制作一个双层牛肉堡呢?

夹心

  • 可以把原来的东西去了
    • 然后把新的夹心放进去

图片描述

  • 能否保留目前面包片

图片描述

  • 直接把新夹心放进去呢?

塞入夹心

  • l[1:1] 是一个 空列表
    • 空列表也可以被替换

图片描述

  • 试试双层汉堡
num_list = list(range(3))

三块面包

  • 留三片面包

图片描述

  • 最后的牛肉怎么放?
    • 交给你了!

总结

  • 这次我们了解了
    • 切片操作
  • 切片和索引有点像
    • 索引得到的是一个列表项
    • 切片得到的是一个列表
      • 里面有很多列表项
  • 切片主要有2个端点
    • 这两个端点本质上都是索引值
    • 开始 包括在内
    • 结束 不包括在内
    • 前闭后开

图片描述

  • 列表切片 有什么具体应用呢?🤔
  • 下次再说 👋