find方法_指数为负数_index_实际效果
回忆
- 上次了解了eval函数
- 根据本地和全局的变量
- 将 source
- 衡量 (evaluate)出来
- 要特别注意
- 类名 str、int、list 不能作为变量名
- 那样 会 覆盖掉 类
- 字符串 中 索引值 可以 是 负数
- 列表中 索引值 可以是 负数吗?🤔
负数索引
char_list = list("oeasy") char_list[-1]
- "o" 是 第0个 元素
- 第0个 再减1
- 等于 -1
- 最后1个元素"y"
- 首尾相连的话
- 挨着 第0个
- 方向相反
- 所以 索引为 -1
继续遍历
- 再往前1个元素
- 索引为-2
- 那负数索引
- 怎么理解?🤔
负数索引
char_list = list("oeasy") char_list.index("y")
- "y"的索引为 4
- 长度 len(l)为 5
char_list.index("y") - len(char_list) char_list[char_list.index("y") - len(char_list)]
- y的索引值 - 字符串的长度
- 4 - 5
- 得到 -1
- 负数索引 可以 理解为
- 正索引 减去 长度
索引列表
- 可以根据索引号
- 得到相应的字符
0 | 1 | 2 | 3 | 4 |
o | e | a | s | y |
-5 | -4 | -3 | -2 | -1 |
- 如果 index方法 查找的是
- 不存在的 列表项 呢?
不存在的
char_list = list("oeasy") char_list.index("k")
- "k" 在 char_list 中并不存在
- 系统报错
- 值错误
- 如果列表里
- 对应两个列表项 呢?
两个匹配
char_list = list("oeasyo2z") char_list.index("o")
- char_list中有两个'o'
- 如果 有两个列表项 和 参数匹配
- index 只会找到 第一个列表项的 索引
- 如何找到 第二个列表项 呢?
范围匹配
help(list)
- index方法有三个参数
- value
- start
- stop
- 默认匹配 first 第一个
- 可以控制 start
- start 是 开始位置
- 想要 匹配第2个
参数
- 从第 0 个元素的位置开始找
- 找到第0项
- 从第 1 个元素的位置开始找
- 也就是从 e 开始
- 前面的 o 就不算数了
- 找到第 5 项
- start 是包含本身的
- stop 如何理解呢?
stop
- stop
- 结束位置
- start 和 stop 前闭后开
- stop 的位置本身是不被包含的
- 就像 range 的构造函数一样
- stop 默认值是多少?🤣
最大结束位置
- stop 默认值 非常大的 一个数
- 具体多大呢?
转化
bin(9223372036854775807) len(bin(9223372036854775807)) len(bin(9223372036854775807)) - 2 + 1
- 用bin把这数字转化为二进制形态
- 总共63个1
- 说明 最大正数 是 63个1
- 除了正数之外 还有负数
- 说明这个 数据的存储 需要
- 64-bits
- 8-bytes
- 这是 8-bytes 有符号正数的最大值
- 能建立比这个范围还大的列表吗?
崩溃了
list(range(9223372036854775807)) list(range(9223372036854775808))
- 好像崩溃了啊
- 😁哈哈哈哈
- OverflowError
- 如何理解OverFlow呢?
overflow
- overflow
- over超过
- flow 流出
- 溢出
- 索引函数index 的 结束位置参数
- 超过了 8-bytes 所能容纳数字的极限
- 发生了溢出
- 索引 有什么具体应用 吗?
遍历小时数
- 遍历所有的小时数
- 生成一个列表
- 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(0x3358 + 9) + "\33[0m" l_hours[17] = "\33[41m" + chr(0x3358 + 17) + "\33[0m" for hour in l_hours: print(hour, end="\t")
- 运行结果
- 精准替换完成
- 除了列表list之外
- 字符串str也可以有索引吗?
字符串索引
- 确实有
- 这个方法在找子字符串的索引位置
- 和str.find很像啊
str.find
- 好像是一模一样?
查看帮助
- 功能一模一样
- 出错处理有差别
- index 找不到子串时抛出 ValueError 错误
- find 失败后返回 -1
- 有了index
- 为啥还要有 find呢?
各有各的好处
- 各有特色
- find 看起来比较温和
- index 看起来更加刚猛一点
- 弥乐佛 笑迎八方客
- 负责公关
- 香火旺
- 韦陀 铁面无私
- 负责财务审计
- 锱珠必较
- 严格把关
- 共处天王殿
- 性格互补
- 背靠背
总结
- 这次了解了 列表的下标索引
- 可以是 正数
- 也可以是 负数
0 | 1 | 2 | 3 | 4 |
o | e | a | s | y |
-5 | -4 | -3 | -2 | -1 |
- 有
2
个函数都
可以
- 根据 列表项
- 找到 索引位置
函数 | 输入 | 输出 | 区别 |
index | 列表项 | 索引值 | 找不到 就报ValueError |
find | 列表项 | 索引值 | 找不到 不报错 返回-1 |
- 这列表 还有什么
好玩
的 吗?🤔 - 下次再说 👋
- 蓝桥->https://www.lanqiao.cn/courses/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython