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
- 具体得试一下
- 列表中有 5 个元素
- "o"是第几个?
- o 是第 0 个元素
- 所以 l.index("o")是 0
- 这好像 是个循环
- 先求索引
- 再查元素
- 还是得到"o"
- 能否先查元素再求索引?
- 负数 可以索引到 列表项 吗?
- "o" 是 第0个 元素
- 第0个 再减1
- 等于 -1
- 第0个 再减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 是 开始位置
- 可以控制 start
- 想要 匹配第2个
- 从第 0 个元素的位置开始找
- 找到第0项
- 从第 1 个元素的位置开始找
- 也就是从 e 开始
- 前面的 o 就不算数了
- 找到第 5 项
- start 是包含本身的
- stop 如何理解呢?
- stop
- 结束位置
- start 和 stop 前闭后开
- stop 的位置本身是不被包含的
- 就像 range 的构造函数一样
- 如果两个参数都是负的
- 会如何呢?🤔
- 负数序号可以转化
- 负数序号其实可以转化成
- 对应的正数序号
- stop 的最大值是个什么情况?🤣
- 默认值非常大的一个数
- 具体是几个字节呢?
- 用bin把这数字转化为二进制形态
- 用hex把这数字转化为十六进制形态
- 这是 8 字节 long 型有符号正数的最大值
- 可能也就是能够索引的边界
- 能建立比这个范围还大的列表吗?
- 可以试试
- 好像崩溃了啊
- 😁哈哈哈哈
- OverflowError
- 如何理解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很像啊
- 好像是一模一样?
- 功能一模一样
- 出错处理有差别
- 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参数
- 指定位置
- 列表的索引 还有 什么实际的应用 吗?🤔
- 下次再说 👋