Python 第 11 节课 - string 与 random 的方法
- 第 93 篇 -
Date: 2025 - 04 - 26
Author: 郑龙浩/仟墨
【Python 在校课堂笔记】
Python 第 11 节课 - string 与 random 的方法
上课时间: 2025-04-14
文章目录
- Python 第 11 节课 - string 与 random 的方法
- 一 string 的方法
- 1 s.split()
- 2 s.find()
- 3 s.replace()
- 4 s.strip / s.lstrip / s.rstrip
- 5 s.join(sss)
- 6 s.count(sub)
- 7 s.maketrans(x, y)
- 二 random 模块
- 1 random.random() – `>0`且`<1` 的随机小数
- 2 random.random(x, y) – 指定范围的随机数
- 3 random.random(start, stop, [ , step]) – 指定范围和步长的随机数
- 三 作业
- 1 问题 `count` 的查找原理是什么,是从前往后寻找的吗???
- 2 作用
- 3 原理
- ① 基本原理
- ② 特殊情况的处理
- 4 多次打印进行理解
一 string 的方法
1 s.split()
一串字符串中有多少个单词?
split(' ')
以空格为分隔符拆分字符, 并且生成列表len()
会计算这个列表的长度,也就是单词数量
s = 'Big data transforms industries by analyzing massive unstructured information streams efficiently.'
print (len(s.split(' '))) # split以空格为分隔符拆分字符, 并且生成列表,len计算列表长度,print打印
print (len(s.split(' '))) # split自动识别分隔, 并且生成列表, len计算列表长度,print打印
2 s.find()
查找某个字符
示例1 – 查找某字符串
s = "hello world"
index = s.find("world") # 查找 "world" 的位置
print(index) # 输出: 6
示例2 – 查找某字符
print("hello".find("l")) # 输出: 2(第一个 'l' 的索引)
print("hello".find("x")) # 输出: -1(未找到)
示例3 – 可指定搜索范围
s = "hello world"
print(s.find("o", 5)) # 从索引 5 开始找,输出: 7
print(s.find("o", 1, 4)) # 在索引 1~4 范围内找,输出: 4
3 s.replace()
字符串替换
示例1 – 简单替换
"aaabbb".replace("a", "x") # "xxxbbb"
示例2 – 限制替换次数
"aaabbb".replace("a", "x", 2) # "xxabbb"(只替换前2次)
示例3 – 删除字符(替换为空字符)
"hello".replace("l", "") # "heo"
4 s.strip / s.lstrip / s.rstrip
移除字符串开头或结尾指定的字符,比如移除前导
0
,空格等
不写参数的话,默认删除空白字符,比如: 空格、\t
、\n
- 去除开头结尾的空格
s.strip(' ')
- 去除开头的空格
s.lstrip(' ')
- 去除结尾的空格
s.rstrip(' ')
s = ' aaaaabbbbb '
print (s.strip(' ')) # "aaaaabbbbb"去除开头和结尾的空格
print(s.lstrip()) # "aaaaabbbbb "(仅去左侧空格)
print(s.rstrip()) # " aaaaabbbbb"(仅去右侧空格和换行)
5 s.join(sss)
以字符串s作为分隔符,将可迭代对象 sss 中的字符串元素拼接为一个新的字符串
6 s.count(sub)
统计参数sub在字符串中出现的次数
从字符串的开头往后寻找
s = '1212111111'
print (s.count('12')) # 打印 2 --> 寻找有多少个12
print (s.count('11')) # 打印 3 --> 寻找有多少个11
print (s.count('121')) # 打印 1 --> 寻找有多少个121
思考: count
的查找原理是什么,是从前往后寻找的吗???
7 s.maketrans(x, y)
创建字符映射的转换表,参数是字符串
- 第一个参数表示需要转换的字符
- 第二个参数表示转换的目标
凯撒密码,以大小写字母为例,假设偏移量为n
将给定的字符串,转化为映射表里的内容
import string
s = input('输入要加密的字符串: ')
n = int(input('偏移: '))
q = string.ascii_letters
h = string.ascii_lowercase[3:] + string.ascii_lower[:3] + string.asscii_letters
二 random 模块
import random
1 random.random() – >0
且<1
的随机小数
print ( random.random() )
2 random.random(x, y) – 指定范围的随机数
随机产生 1 ~ 100 的随机整数
print ( random.random(1, 100) )
3 random.random(start, stop, [ , step]) – 指定范围和步长的随机数
随机产生 1 ~ 100 的随机整数,且每个随机数都是 以5为步长产生随机整数 (5 的倍数)
print ( random.random(1, 100, 5) )
三 作业
1 问题 count
的查找原理是什么,是从前往后寻找的吗???
简述作用以及原理
作用 string
中的 的 count
方法用于统计子字符串在原字符串中出现的次数。
原理 通过遍历和匹配逐个检查子字符串的位置,支持指定搜索范围,并处理特殊情况(如空子字符串)
2 作用
- 为了方便描述,要查找的 子字符串 我用
sss
进行表示,原字符串 我用s
进行表示 - 指定的起始位置用
start
表示, 指定的结束位置用end
表示 –>start
与end
表示的都是索引
查找的字符区分大小写
-
在原字符串中查找子字符串
-
返回子字符串
sss
在原字符串中非重叠出现的次数 -
如果只写一个参数,也就是只写了要查找的字符串,没有写开始位置和结束位置,这样的话默认查找整个字符串
s = "hello world" print(s.count("l")) # 输出:3('l'出现3次) print(s.count("lo")) # 输出:1("lo"在"hello"中出现1次)
-
-
在原字符串的指定范围中查找子字符串
- 范围是 左闭右开,从字符串索引
start
到end - 1
,而不是到end
- 如果只写两个参数,则第 2 个参数表示的是结束搜索的索引,而不是开始搜索的索引
start
:开始的索引end
:结束的索引
s = 'abcdefabc' print(s.count('abc', 3)) # 从索引 3 开始搜索,直到结尾,输出:1 print(s.count('a', 0, 3)) # 从索引0 搜索到 索引 2,输出:1
- 范围是 左闭右开,从字符串索引
-
若
sss
是空字符串''
,返回值为原字符串长度加1为什么是这样呢,下面第三个标题原理中写了
print("abc".count('')) # 输出:4(空字符串在3个字符间有4个位置)
3 原理
- 为了方便描述,要查找的 子字符串 我用
sss
进行表述,原字符串 我用s
进行表述 - 指定的起始位置用
start
表示, 指定的结束位置用end
表示 –>start
与end
表示的都是索引
① 基本原理
找的顺序肯定是从前往后找的
查找的时候是非重叠的,也就是前边查找过的字符是不会查找第二遍的
- 从
s
的起始位置 或 start (指定的起始位置)开始,逐个字符检查是否有与sss
匹配的 子字符串,若找到则累加 - 每次找到
sss
以后,下一次搜索从当前找到的子字符串的结束位置开始继续向后边搜索 –> 所以是非重叠统计,也就是遍历过的的字符是不会再找第二次了 - 当查找完以后,返回 查找到的子字符串的数量
- 查找的时候区分大小写,毕竟大写和小写字母的
ASCII
值是不同的
② 特殊情况的处理
边界的处理要特殊判断
-
若
sss
的长度大于s
的长度,则直接返回 0 -
若
start
或end
越界了,则自动调整到有效的索引的边界左边界越界则调整左边界到
0
,右边界超了则调整右边界到len(s)
Eg:
s = '0123456789' print (s.count(s, -1, 13)) # 会自动将范围由 [-1, 13) 调整到 [0, 10), 即调整到有效的索引的边界
-
若没有指定范围时,
sss
为空,则返回的长度为 字符串长度 + 1因为 空字符串 存在于
- 所有的字符之间
- 首个字符的左边
- 最后一个字符的右边
加起来就是 总字符串的长度 + 1
-
若指定返回时,
sss
为空,则返回(end - start) + 1
,也就是末尾索引的后边 - 开头索引 + 1
(因为时左闭右开,所以end不是查找的最后一字符的索引)因为 空字符串 存在于
- start 到 end - 1 之间
start
的左边end - 1
的右边
加起来就是
(end - start) + 1
4 多次打印进行理解
s = 'abcabcabc123456123ab'
print(s.count("ab")) # 输出:4
print(s.count("AB")) # 输出:0 --> 查找的时候是区分大写和小写的,毕竟大写字母和小写字母的ASCII值是不同的
print(s.count("")) # 输出:21 --> 长度为20 + 1
print(s.count("ab", 10 )) # 输出:1 --> 从索引 10 开始查找 `ab`
print(s.count("ab", 1, 5 )) # 输出: 1 --> 查找范围为 1 ~ 4