Skip to content

Latest commit

 

History

History
485 lines (321 loc) · 10.2 KB

089-192241-列表_索引_index_中括号_索引函数.sy.md

File metadata and controls

485 lines (321 loc) · 10.2 KB
show version enable_checker
step
1.0
true

列表 - 索引

回忆

  • 上次了解
    • 通过 可迭代对象 生成 列表
  • 字符串序列 s
    • 可以把每个字符 转化 为列表项
  • split 切分出 若干 可迭代字符串
    • 也 可以 作为 列表项
  • 可迭代对象还包括
    • 文件对象
    • 字符串对象
    • range函数返回结果对象

图片描述

  • 如何 选择 列表项呢?🤔

回忆字符串

  • 字符串 就是
    • 把字符 串起来
  • 字符串里面
    • 每个字符 是 一个山楂

图片描述

  • 那么 由字符串生成的列表(list)
    • 是否可以用索引(index)呢?

尝试

char_list = list("oeasy")
  • 中括号里面

    • 放索引数
    • index number
  • 可以 找到列表(list)中

    • 第几个列表项

图片描述

  • 从零开始

指数越界

  • 如果超过了列表 list 大小
    • 就会报错
    • IndexError
      • list index out range
    • 列表索引超出范围

图片描述

  • 为什么用中括号加序号
    • 可以找到相应的列表项呢?

查询文档

图片描述

  • 索引这个词究竟来自于什么来着?

索引

  • the forefinger
    • 指出发现的手指

图片描述

  • 就是 第二根手指
    • index

指出

图片描述

  • 指数、指标都来自于食指

食指

  • 指出的手指
    • 也是尝试的手指
    • 不敢直接吃
    • 试着来

图片描述

  • 食指是这个词最根本的含义

图书的目录

  • 图书的目录
    • 可以指出章节在第几页

图片描述

  • 根据序号 找到列表项的方式

    • 就是 索引
    • index
  • 能否反过来

    • 根据相应的字符
      • 得到索引呢?

帮助手册

help(list)
  • 求助文档

图片描述

  • 找到这样一个索引函数
    • index
  • 具体得试一下

index

  • 列表中有 5 个元素
    • "o"是第几个?

图片描述

  • o 是第 0 个元素
    • 所以 l.index("o")是 0
    • 这好像 是个循环

绕一圈

  • 先求索引
    • 再查元素
    • 还是得到"o"

图片描述

  • 能否先查元素再求索引?

先查元素再求索引

图片描述

  • 负数 可以索引到 列表项 吗?

负数索引

  • "o" 是 第0个 元素
    • 第0个 再减1
      • 等于 -1
char_list = list("oeasy")
  • 最后1个元素"y"
    • 首尾相连的话
    • 挨着 第0个
    • 但是 反方向
    • 索引为 -1

图片描述

继续遍历

  • 再往前1个元素
    • 索引为-2

图片描述

  • 那负数索引
    • 怎么理解?🤔

负数索引

char_list = list("oeasy")
char_list.index("y")
char_list.index("y") - len(char_list)
char_list[char_list.index("y") - len(char_list)]
  • "y"的索引为 4
    • 长度 len(l)为 5
    • 所以索引既可以是 4
  • 也可是 4-5
    • 就是-1

图片描述

  • 负数索引可以理解为
    • 索引减去长度

索引列表

  • 可以根据索引号
    • 得到相应的字符
0 1 2 3 4
o e a s y
-5 -4 -3 -2 -1
  • 那么如果查找一个列表中不存在的元素呢?

不存在的

char_list = list("oeasy")
char_list.index("k")
  • "0" 在 char_list 中并不存在
    • 系统报错
    • 值错误

图片描述

  • 如果列表里
    • 对应两个列表项 呢?

两个匹配

char_list = list("oeasyo2z")
char_list.index("o")
  • char_list中有两个'o'

图片描述

  • 如果有两个列表项和参数匹配
    • 他会匹配第1个
  • 为啥?

范围匹配

help(list)
  • index方法有三个参数

图片描述

  • 默认匹配 first 第一个
    • 可以控制 start
      • start 是 开始位置
  • 想要 匹配第2个

参数

  • 从第 0 个元素的位置开始找
    • 找到第0项

图片描述

  • 从第 1 个元素的位置开始找
    • 也就是从 e 开始
    • 前面的 o 就不算数了
    • 找到第 5 项
  • start 是包含本身的
  • stop 如何理解呢?

stop

  • stop
    • 结束位置

图片描述

  • start 和 stop 前闭后开
    • stop 的位置本身是不被包含的
    • 就像 range 的构造函数一样

图片描述

  • 如果两个参数都是负的
  • 会如何呢?🤔

start、end都为负数

  • 负数序号可以转化

图片描述

  • 负数序号其实可以转化成
    • 对应的正数序号

图片描述

  • stop 的最大值是个什么情况?🤣

最大结束位置

  • 默认值非常大的一个数

图片描述

  • 具体是几个字节呢?

转化

  • 用bin把这数字转化为二进制形态
  • 用hex把这数字转化为十六进制形态

图片描述

  • 这是 8 字节 long 型有符号正数的最大值
    • 可能也就是能够索引的边界
  • 能建立比这个范围还大的列表吗?
    • 可以试试

崩溃了

  • 好像崩溃了啊
    • 😁哈哈哈哈
    • OverflowError

图片描述

  • 如何理解OverFlow呢?

overflow

  • overflow
    • over超过
    • flow 流出
    • 溢出

图片描述

  • 超过了8个字节所能容纳数字的极限
    • 发生了溢出
    • 导致索引函数index 的 结束位置参数 不可用
  • 索引 有什么具体应用 吗?

遍历小时数

  • 遍历所有的小时数

图片描述

  • 生成一个列表
    • 0x3358的意思是(3358)16进制

图片描述

  • 运行结果

图片描述

需求

图片描述

  • 我想
    • 把9点变成绿色
    • 把17点变成红色

变色

l_hours = []
for n in range(0x3358, 0x3358+24):
	l_hours.append(chr(n))
l_hours[9] = "\33[42m" + chr(0x33358 + 9) + "\33[0m"
l_hours[17] = "\33[41m" + chr(0x33358 + 17) + "\33[0m"
for hour in l_hours:
	print(hour, end="\t")

图片描述

  • 运行结果

图片描述

  • 精准替换完成
  • 除了列表之外
  • 字符串也可以有索引吗?

字符串索引

图片描述

  • 这个方法和str.find很像啊

str.find

图片描述

  • 好像是一模一样?

查看帮助

图片描述

  • 功能一模一样

图片描述

  • 出错处理有差别
    • index 找不到子串时抛出 ValueError 错误
    • find 失败后返回 -1
  • find 看起来比较温和
  • index 看起来更加刚猛一点
  • 哪个好呢?

各有各的好处

  • 弥乐佛负责公关
    • 笑迎八方客
    • 于是香火大旺
  • 韦陀铁面无私
    • 锱珠必较
    • 则让他负责财务
    • 严格把关

图片描述

  • 共处天王殿
    • 性格互补
    • 背靠背
  • 字符串支持用[]索引
    • 直接修改字符吗?

字符串索引运算

  • 字符串对象支持索引方式获取字符

图片描述

  • 但不支持通过索引修改字符串
  • 但如果我就想根据索引修改字符串
  • 怎么办呢?

绕道

s = "oeasy"
char_list = list(s)
char_list
char_list[2] = "A"
char_list
s = ""
for c in char_list:
	s += c

  • 通过list列表

图片描述

  • 曲则全
    • 枉则直
    • 绕路才能到成功
  • 收工

总结

  • 这次了解了列表的下标索引
    • 可以用中括号 索引到 相应的元素
    • 还可以 替换相应的元素
  • 用 index函数 可以 找到某对象的位置
    • 如果 列表中 有多个指定元素
    • 可以通过 index函数的start和end参数
    • 指定位置
  • 列表的索引 还有 什么实际的应用 吗?🤔
  • 下次再说 👋