当前位置: 首页 > news >正文

Python科学计算第五章 字符串的使用

转义字符与原始字符串

常用转义字符:

\n:换行符

\t:制表符

\\:一个反斜杠

\':单引号

\":双引号

在字符串引号前加r或R表示原始字符串,不进行任何转义

例如 r'C:\temp'

常用格式字符

%s:字符串

%c:单个字符

%d:十进制整数

%o:八进制整数

%x:十六进制整数

%e与%E:指数,基底为e与E

%f与%F:浮点数

%%:一个百分号


字符串的三种引用变量的格式化方法

1. 百分号格式化

格式化字符串:

'...%-+0m.n格式字符...'%item

第一个%:格式化开始标志

格式字符:如%s, %d等,格式化结束标志

-:左对齐

+:正数加正号 0:空位补0(不可指定其它字符),通常与最小宽度一起使用

m:最小宽度,默认补空格

.n:保留n位小数

item:待转换表达式,如一个变量

至少要有'%格式字符' % item,其余可选

示例: s = '%08.2f %-5d' % (3.14159, 123) print(s) ''' '00000003.14 123 ' '''

2. str.format() 方法格式化

格式化字符串:

'...{索引:格式说明符}...'.format(表达式0, 表达式1)

占位符(冒号为格式说明符开始的标志):

{索引:格式说明符}

索引与格式说明符可都不带,可带其一,也可都带

  1. 不带索引:表达式数量必须和占位符数量一致,依次取表达式

  2. 带索引:取索引对应的表达式

  3. 不带格式说明符:直接填入原表达式计算结果

  4. 带格式说明符:原表达式计算结果按规定格式格式化后填入

索引

  1. 下标索引
    '...{2}...{1}...'.format(表达式0, 表达式1, ...) # 填对应下标的表达式
  2. 名字索引
    '...{名b}...{名a}...'.format(名a=表达式0, 名b=表达式1, ...) # 填对应名称的表达式

格式说明符:

[[fill]align][sign][#][0][width][,][.precision][type] # 中括号表示可选可不选

fill:填充符,同时有[fill]与[0]按fill来。与align一起使用

align:数字类型对齐方式,左对对齐<,右对齐<,居中对齐^,在正负号和整数和数字间填充=

sign:+表示正数加正号、负数加符号;-表示默认的仅负数加符号

#:加前缀。若选上#,则二进制加0b,八进制加0o,十六进制加0x

0:空位补0

width:最小宽度

,:千分位加逗号

.percision:保留percision位小数,例如.2保留2位小数

type:格式字符如s, d, f

对应中文:

[[填充符]对齐方式][带正负号/只带负号][进制数加前缀][空位补0][最小宽度][千分位逗号][.保留小数位数][格式字符]

# 示例: # 名字索引 print("name is {name}, age is {age}, QQ is {qq}".format(name="Zhang san",age=40,qq="12345****")) ''' name is Zhang san, age is 40, QQ is 12345**** ''' # 下标索引与格式说明符同时使用 print("{0:,} in hex is: {0:#x}, {1} in oct is {1:#o}".format(5555,55)) # {0:,} 索引0 -> 5555 -> 格式说明符为, -> 千分位加逗号 -> 5,555 # {0:#x} 索引0 -> 5555 -> 格式说明符为#x -> 转为十六进制数加前缀 -> 0x15b3 # {1} 索引1 -> 55 -> 无格式说明符 -> 直接填入 -> 55 # {1:#o} 索引1 -> 55 -> 格式说明符为#o -> 转为八进制加前缀 -> 0o67 ''' 5,555 in hex is: 0x15b3, 55 in oct is 0o67 '''

3. f 字符串格式化

格式化字符串:

f'...{表达式名1:格式说明符1}...{表达式名2:格式说明符2}...'

在字符串前加f,之后使用如上形式给出。完全支持与str.format()方法相同的格式说明符

# 示例: num1 = 5555 num2 = 55 print(f'{num1:,} in hex is: {num1:#x}, {num2} in oct is {num2:#o}') # {num1:,} -> 5555 -> 格式说明符为, -> 千分位加逗号 -> 5,555 # {num1:#x} -> 5555 -> 格式说明符为#x -> 转为十六进制数加前缀 -> 0x15b3 # {num2} -> 55 -> 无格式说明符 -> 直接填入 -> 55 # {num2:#o} -> 55 -> 格式说明符为#o -> 转为八进制加前缀 -> 0o67 ''' 5,555 in hex is: 0x15b3, 55 in oct is 0o67 '''

常见等价考法

scores = 3.14 # 百分号 s3 = '%010.2f' % scores print(s3) ''' 0000003.14 ''' # str.format() s2 = '{:010.2f}'.format(scores) print(s2) ''' 0000003.14 ''' # f 字符串 s1 = f'{scores:010.2f}' print(s1) ''' '0000003.14' '''

字符串常用方法

1. str.find, str.rfind, str.index, str.rindex 查找子串在str首/末次出现位置

str1.find(str2, 起, 止)

str1.index(str2, 起, 止)

str1.rfind(str2, 起, 止)

str1.rindex(str2, 起, 止)

起止均不指定表示查找整个str1。也可仅指定起始。查找str2在str1在查找范围的下标(下标从0起)。

find与index返回第一次出现位置;rfind与rindex返回最后一次出现位置。

若查找到,返回子串首字符出现的下标;若查找失败,find/rfind返回-1,index/rindex报错

str1 = '01234567890123456789' print(str1.find('01')) ''' 0 ''' print(str1.find('01', 10)) ''' 10 ''' print(str1.find('01', 1, 9)) ''' -1 # 查找失败 ''' print(str1.rfind('01')) ''' 10 ''' print(str1.index('01', 1, 9)) ''' Traceback (most recent call last): File "***.py", line 23, in <module> print(str1.index('01', 1, 9)) ~~~~~~~~~~^^^^^^^^^^^^ ValueError: substring not found ''' s = 'abc' s.find('') #0 s.rfind('') #3

2. str.count 返回子串出现次数

str1.count(str2)

返回str2在str1中出现次数。默认返回0

返回非重叠子串个数

print('aaaaa'.count('aa')) '''' 2 '''

3. str.split, str.rsplit 分割、右分割

str.split() # 从左向右按白字符分割,返回删除白字符和空字符后的分隔列表

str.rsplit() # 从右向左按白字符分割,返回删除白字符和空字符后的分隔列表

str.split(分隔符) # 从左向右按分隔符分隔,返回删除分隔符后的分隔列表(会保留切出的空字符)

str.rsplit(分隔符) # 从右向左按分隔符分隔,返回删除分隔符后的分隔列表(会保留切出的空字符)

str = 'ab, 12,6,,\t4,, 13' # 不指定分隔符(默认按白字符分隔) print(str.split()) ''' ['ab,', '12,6,,', '4,,', '13'] # 此处按白字符(空格和换行符)分隔了,不保留空字符 ''' # 空格为分隔符 print(str.split(' ')) ''' ['ab,', '', '12,6,,\t4,,', '13'] # 指定了分隔符,保留空字符 ''' # 逗号为分隔符 print(str.split(',')) ''' ['ab', ' 12', '6', '', '\t4', '', ' 13'] # 指定了分隔符,保留空字符 '''

由于指定了分隔符不会自动舍弃空字符,若需得到分隔且删除空字符后的列表,可按照如下方法:

str = 'ab, 12,6,,4,, 13' lst = str.split(',') print(lst) ''' ['ab', ' 12', '6', '', '4', '', ' 13'] # 保留切出的空字符 ''' result = [item for item in lst if item] # 空字符作为False不会被列表推导式筛选 print(result) ''' ['ab', ' 12', '6', '4', ' 13'] '''

4. str.partition, str.rpartition 分割为三部分

str.partition(分隔符) # 从左向右找到str中分隔符,将str分为[分隔符前, 分隔符, 分隔符后]三部分,返回元组

str.rpartition(分隔符) # 从右向左找到str中分隔符,将str分为[分隔符前, 分隔符, 分隔符后]三部分,返回元组

5. join 字符串连接

'连接符'.join(字符串列表)

lst = ['1', '2', '3', '4'] print('+'.join(lst)) ''' 1+2+3+4 '''

6. str.lower, str.upper, str.capitalize, str.title 大小写转换

str.lower():返回全小写字符串

str.upper():返回全大写字符串

str.capitalize():返回首字母大写字符串

str.title():返回仅第一个单词首字母大写字符串

7. str.replace 子串替代

str.replace(old, str2, 次数)

返回值:将str中字串old逐个替换成new,共替换够次数(不写次数则全部替换)

不改变原字符串(因字符串不可变)

str = 'abcabcdabsdabc' str1 = str.replace('abc', '36') print(str1) ''' 3636dabsd36 ''' str2 = str.replace('abc', '36', 2) print(str2) ''' 3636dabsdabc '''

8. str.strip, str.rstrip, str.lstrip 删除左右指定字符

令drop为要删字符组成的字符串

将字符串对应的端删到遇到不在drop中的字符为止

str.strip(drop):从左端和右端同时删除,直到遇到不在drop中的字符

str.rstrip(drop):删str右端,直到遇到不在drop中的字符

str.lstrip(drop):删str左端,直到遇到不在drop中的字符

str = 'abcabcdabsdabc' str1 = str.strip('abc') print(str1) ''' dabsd ''' str2 = str.lstrip('abc') print(str2) ''' dabsdabc ''' str3 = str.rstrip('abc') print(str3) ''' abcabcdabsd '''

eval 函数

eval(字符串)

把字符串中内容当作语句直接执行

print(eval('1+2+3')) ''' 6 '''

eval会执行任意代码,不要对不安全输入使用eval


成员判断

1. in 判断子串

str1 in str2

str1为str2子串则返回True,否则返回False

2. 字符类型判断

常用几种:

str.isalnum():str非空且所有字符都是字母或数字(alpha或num,写成alnum)返回True

str.isdigit():str非空且所有字符都是数字返回True

str.isalpha():str非空且所有字符都是字母则返回True

http://www.jsqmd.com/news/1204528/

相关文章:

  • 中国人形机器人竞争力:工程化落地能力与核心瓶颈分析
  • Mac高效使用指南:从工具推荐到系统优化
  • CH32V307移植FATFS文件系统实战指南
  • 鸿蒙ArkUI实战:实现账单关键词搜索
  • 语言学习资源矩阵:从零基础到精通的实战指南
  • 计算机毕业设计之jsp校园网教室查询预约系统设计与实现
  • JetBrains MCP协议详解:AI IDE底层交互范式革命
  • YOLO26无NMS目标检测:架构革新与部署优化
  • 人形机器人:不是仿生炫技,而是适配人类世界的物理接口
  • GX Works2安装与FX系列PLC编程实战指南
  • 5分钟解锁网易云音乐加密文件:ncmdump完整免费解密指南
  • C++定时器实现:从最小堆与时间轮原理到多线程安全设计
  • 鸿蒙 ArkTS 实战:Music Practice Timer 从创作记录到状态反馈完整解析
  • 基于微信小程序的旧物交易平台系统开题报告
  • 2026年人形机器人产业落地实况:从Demo到产线的硬核跨越
  • 文件系统接口:存储管理的核心机制与应用实践
  • Windows软件故障排查与优化实战指南
  • 字节、阿里、腾讯为什么越来越爱开源?算完账就懂了。
  • Qt4 GUI编程实战:信号槽机制与现代开发环境适配指南
  • WAM:从VLA到世界动作建模的范式跃迁
  • 宇树科技与云深处IPO进展解析
  • Linux防火墙核心工具对比:iptables与firewalld原理、配置与选型指南
  • C++大学生技能展示平台:从零构建实战项目,打造高质量简历作品集
  • C++数据类型深度解析:从内存布局到智能指针的编程基石
  • C++多线程编程:深入理解std::mutex与std::lock_guard的RAII锁管理
  • 做B站别只盯播放量,B站关键词排名优化才是长尾流量入口
  • Linux chage命令详解:用户密码时效管理实战指南
  • js项目中多层循环嵌套循环(for循环)渲染数据注意事项
  • CW32L083 MCU的GCC工具链移植实战指南
  • 2026年7月宁波模具压射料筒/压铸机气缸行业供应商推荐_宁波市北仑方阳机械有限公司 - 品牌宣传支持者