六、字符串操作
6.1、下标与切片
6.1.1、下标的概念
- 字符串中的每个字符从左向右依次从0开始编号
- 可使用下标访问指定的字符
# 通过下表访问字符串元素
a = "abcdefg"
i = 0
while i < len(a):
print(a[i])
i += 1
输出结果:a b c d e f g
6.1.2、切片操作
- 可以通过切片访问到字符串的一部分内容
- 切片的语法为
序列[开始位置下表:结束位置下表:步长]
- 不包括结束位置对应内容,即左闭右开,正负都可以取
- 步长即为选取间隔,可以不写,默认为1,可取负数
- 选取方向(即开始到结束的方向)必须和步进方向一致
str = "012345678"
print(str[1:5])
print(str[1:5:2])
print(str[:5]) # 不写开始位置下标,则默认从0开始
print(str[1:]) # 不写结束位置下标,则默认从开始位置打印所有
print(str[-1:-5])# 此处没有写步进长度(默认为1,从左往右开始),与选取方向不一致,所以没有打印内容
print(str[-1:-5:-1])
print(str[-1:4]) # 此处开始和结束位置选取方向不一致,也打印不出内容
输出结果:
1234
13
01234
12345678
(此处无内容,仅换行)
8765
(此处无内容,仅换行)
6.1.3、常用操作函数
6.1.3.1、查找方法
6.1.3.1.1、find()方法
*调用方法的语法对象.方法
,通过点号访问
*find()的语法find("子串",开始位置下标,结束位置下标)
,子串存在则返回该子串首次出现时的的开始位置下标,无该子串则返回-1
*这里开始到结束位置下标即为查找区间;结束位置下标可省略,即默认从开始位置到全部
str = "aaa bbb ccc and hello world and ddd and eee"
print(str.find("hello")) # 在整个字符串中检索
print(str.find("hello",1)) # 从str下标为1的位置开始检索
print(str.find("hello",1,11)) # 在str下标1-11的区间内检索,没有则返回-1
输出结果:
16
16
-1
6.1.4.1.2、index()方法
- 语法同find(),只是index()被调用后,如果子串不存在则程序会报错(find()是返回-1)
str = "aaa bbb ccc and hello world and ddd and eee"
print(str.index("and")) #输出结果为12
print(str.index("ands")) # str中不存在ands子串,此处会报错
6.1.4.1.3、count()方法
- 语法同上,返回子串出现的次数,没有则为0
str = "aaa bbb ccc and hello world and ddd and eee"
print(str.count("and")) # 在整个字符串内查找and出现的次数
print(str.count("and",1,15)) # 在区间内查找
print(str.count("ands")) # 没有该子串,返回0
输出结果:
3
1
0
6.1.3.2、大小写转换方法
方法名 | 作用 |
---|---|
capitalize() | 将字符串中首字母转为大写,其余均为小写 |
title() | 将字符串中每个单词的首字母转为大写 |
lower() | 将字符串中大写转小写 |
upper() | 将字符串中小写转大写 |
str = "toNy BBB ccc and hello world and ddd and TOny"
print(str.capitalize()) # 只将将字符串首字母转换为大写,其他字母全为小写
print(str.title()) # 将每个单词的首字母转换为大写
print(str.lower()) # 将字符串中大写字母转为小写字母
print(str.upper()) # 将字符串中小写字母转为大写字母.
运行结果:
Tony bbb ccc and hello world and ddd and tony
Tony Bbb Ccc And Hello World And Ddd And Tony
tony bbb ccc and hello world and ddd and tony
TONY BBB CCC AND HELLO WORLD AND DDD AND TONY
6.1.3.3、首尾空白字符删除方法
方法名 | 作用 |
---|---|
lstrip() | 删除字符串左端空白字符 |
rstrip() | 删除字符串右端空白字符 |
| 删除字符串两端空白字符 |
print(str.lstrip()) # 删除字符串左端空白字符
print(str.rstrip()) # 删除字符串右侧空白字符
print(str.strip()) # 删除字符串两侧空白字符
输出结果:
toNy BBB ccc and hello world and ddd and TOny
toNy BBB ccc and hello world and ddd and TOny
toNy BBB ccc and hello world and ddd and TOny
6.1.3.4、字符串对其方法
方法名 | 作用 |
---|---|
ljust(对齐长度,填充字符) | 将字符串在对齐长度内实现左对齐,其余部分用填充字符填充,以下类似 |
rjust(参量同上) | 将字符串在对齐长度内实现右对齐 |
center(参量同上) | 将字符串在对齐长度内实现居中对齐,以上填充字符参量可省略,默认为空格 |
str = "hello world"
print(str.ljust(20,"#")) # 左对齐,#号填充,下类似
print(str.center(20,"#"))
print(str.rjust(20,"#"))
输出结果:
hello world#########
####hello world#####
#########hello world
6.1.3.5、判断开头和结尾方法
方法名 | 作用 |
---|---|
startwith(子串,开始位置,结束位置) | 判断字符串是在指定区间内以子串开头,区间参数可以省略,则默认从下标0开始 |
endwith(同上) | 判断字符串是在指定区间内以子串结尾 |
str = "hello world"
print(str.startswith("hello")) # 判断str是否以hello开头
print(str.startswith("hes")) # 判断str是否以hel开头
print(str.startswith("ello",1,5)) # 判断指定区间是否以参数子串开头
print(str.endswith("world")) # 判断str是否以world结尾
print(str.endswith("wo")) # 判断str是否以wo结尾
# 此处判断str开头和结尾的较为不严谨,大致来说str可以以hello开头,也可以以hel,当然这两种都对
# 若你的子串为hels,那么才为错,
# 因此概括来说,就是把参数子串里的字符串和要判断的字符串一个字母接一个字母的对比
# 如果子串出现了不同于主串的字母,则为False,反之都为True
输出结果:
True
False
True
True
False
6.1.3.6、字符串包含内容判断方法
方法名 | 作用 |
---|---|
isalpha() | 判断非空字符串是否全为字母组成 |
isdigit() | 判断非空字符串是否全为数字组成 |
isalnum() | 判断非空字符串是否有字母数字组合而成,除此外没有其他字符 |
isspace() | 判断字符串是否为空,全为空格也为空 |
str1 = "helloworld" # 全为字母
str2 = "hello world" # 有空格字符
str3 = "123456" # 全为数字
str4 = "456abc"
str5 = " " # 全为空格,
print(str1.isalpha())
print(str2.isalpha())
print(str3.isdigit())
print(str4.isalnum())
print(str5.isspace())
输出结果:
True
False
True
True
True
6.1.4、字符串操作的注意事项
- 字符串类型为不可更改类型,如大小写转换时,原本的字符串保持不变
- 一般需要用一个新标签来接收字符串经操作后的数据