Skip to content

Latest commit

 

History

History
360 lines (247 loc) · 7.06 KB

File metadata and controls

360 lines (247 loc) · 7.06 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0093
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

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
  • 这列表 还有什么 好玩的 吗?🤔
  • 下次再说 👋
  • 配套视频

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。