一、字符串的复杂操作
1.1 下标(也叫索引)
-
下标代表着第几个数据,从0开始计算,0代表这第一个数据
-
在字符串中可以直接使用“字符串[下标]”的形式获取其中数据
-
# 获取字符串中下标为3的数据 a = '123abc' print(a[3])
- 运行结果:
- 运行结果:
-
-
1.2 切片
-
切片:通过下标范围获取数据
-
切片语法: str [start: end :step]
-
start: 从什么位置开始 如果不写默认从0开始
-
正向索引(正数):从前往后查
-
反向索引(负数):从后往前查
-
-
end: 到什么位置结束
-
正向索引(正数):从前往后查
-
反向索引(负数):从后往前查
-
-
step: 步长 理解为间隔 不添加步长默认为1
-
正向索引(正数):从前往后间隔
-
反向索引(负数):从后往前间隔
-
切片的注意事项:
1:包头不包尾(以开始下标为基础截取)
2:如果只设置了start,会截取到最后
3:如果值设置了end,会从头开始截取
4:start和end可以是负数,但statr不能小于end
5:注意步长不能为0,否则异常
6:起始位置<结束位置 步长为-1的情况下 没有数据 否则倒着输出 就是从右往左
-
代码示例:
-
a = "0123456789" print("a1:"+a[0:9:2])#如果 start 为0,end 为9,step 为2,那么现实的数据应该是 [0,2,4,6,8] print("a2:"+a[-3:10])#如果 start 为负数,那么开始位置下标从后往前查 print("a3:"+a[-6:-3])#开始结束都为负数,都从后往前查 print("a4:"+a[-3:-6])#开始结束都为负数,但是结束下标大于开始下标,查询不出数据,因为超出范围了 print("a5:"+a[::-1])#倒序输出 print("a6:"+a[0:10:-1])#无数据 print("a7:"+a[10:0:-2])#倒序查询:和 print("a5:"+a[::-1]) 类似
-
-
-
-
1.3 字符串的相关函数方法
-
len(str):获取字符串长度
-
字符串下标获取
-
str.find(sub[, start[, end]]): 根据开始下标和结束下标这个范围,获取字符串中指定字符的最开始的下标(最小) ,如果不指定下标范围就默认为全部范围,如果字符在字符串里不存在 结果是-1
-
str.index(sub[, start[, end]]): 和find()一样,但如果子字符不存在,会报错ValueError
-
str.rfind(sub[, start[, end]): 根据开始下标和结束下标这个范围,获取字符串中指定字符的最末尾的下标(最大) ,如果不指定下标范围就默认为全部范围,如果字符在字符串里不存在 结果是-1
-
str.rindex(sub[, start[, end]]): 和rfind()一样,但如果子字符不存在,会报错ValueError
- 代码示例:
-
x = "abcdefg" print(len(x))#获取字符串长度 print(x.find('c')) # 获取字符的下标,如果字符在字符串里不存在 结果是-1 print(x.index('c')) # 使用idnex获取字符的下标,如果字符不存在 会报错 print(x.find('c',4,7)) # 查看 4~7这个范围是否存在该字符,不存在给 -1 print(x.rfind('c')) # 最大索引 print(x.index('c'))# 最大索引 没有就报错
-
- 代码示例:
-
-
字符串查找判断
-
startswith(prefix[,start[,end]]): 判断字符串是否以 prefix 属性传入的内容为开头,如果是返回 True,否则返回 False。 如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较
-
endswith(suffix[, start[, end]]): 判断字符串是否以 suffix 属性传入的内容为结尾,如果是返回 True,否则返回 False。 如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较
-
isalpha(): 如果字符串中的所有字符都是字母,并且至少有一个字符,返回 True ,否则返回 False 。
-
isdigit(): 如果字符串中的所有字符都是数字,并且至少有一个字符,返回 True ,否则返回 False 。数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字
-
isalnum():: 如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回 True , 否则返回 False 。
-
isspace(): 如果字符串中只有空白字符且至少有一个字符则返回 True ,否则返回 False .
- 代码示例:
-
#is开头的是判断 结果是一个布尔类型 print('hello'.startswith('e')) # False print('hello'.endswith('llo'))# true print('he45llo'.isalpha()) # False alpha字母 print('good'.isdigit()) # False print('123'.isdigit())# True print('3.14'.isdigit())# False # alnum 判断是否由数字和字母组成 print('ab12hello'.isalnum())# True print('hello'.isalnum())# True print('1234'.isalnum())# True print('4-1'.isalnum())# False print(' '.isspace())# True
-
- 代码示例:
-
-
字符串中的计数器
- count(sub[,start[,end]]): 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 [start, end] 如果不填写范围默认全部范围
- 代码示例
-
a = "abcdefgaaa" print(a.count("a")) # 运行结果:4
-
- 代码示例
- count(sub[,start[,end]]): 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 [start, end] 如果不填写范围默认全部范围
-
字符串的替换
- str.replace(old, new[, count]): 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现。
- 代码示例
-
a = "aaaaa" b = a.replace("a","b",3)# 将 aaaaa 字符串前三个字母替换成 b print(b) # 结果:bbbaa
-
- 代码示例
- str.replace(old, new[, count]): 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现。
-
字符串的分割
-
split(sep=None, maxsplit=- 1):
-
sep : 通过 sep 作为分隔字符串,返回一个由字符串内单词组成的列表。(sep 属性传入的分隔符必须是字符串中存在的,否则无效)
-
maxsplit: 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。
-
代码示例
-
a = "aa aa er 6345" print(a.split(" ",-1))# 全部拆分 print(a.split("111",-1))# 因为字符串中不存在 111 所以分割无效,只是将字符串存储进列表中 print(a.split(" ",2))# 通过空格可以差分成四份,但是 maxsplit 传入了参数,根据参数传入的是2+1为3份
- 运行结果
- 运行结果
-
-
-
rsplit(sep=None, maxsplit=- 1): 和split()一样,不过 maxsplit 的拆分是从右边开始
- 代码示例
-
a = "aa aa er 6345" print(a.rsplit(" ",-1)) print(a.rsplit("111",-1)) print(a.rsplit(" ",2))
- 运行结果
- 运行结果
-
- 代码示例
-
splitlines(): 通过换行分割
- 代码示例
-
a = "aa\naa\ner\n6345" print(a.splitlines())
- 运行结果
- 运行结果
-
- 代码示例
-
partition(str): 把字符串以str传入的参数分割,分割成为三部分,str前,str和str后,三部分组成一个元组
- 代码示例
-
mystr = '今天天气好晴朗,处处好风光' print(mystr.partition('好'))
- 运行结果
- 运行结果
-
- 代码示例
-
rpartition(str): 把字符串以str传入的参数分割,分割成为三部分,str前,str和str后,三部分组成一个元组,和partition()效果一样,不过是从右开始
-
-
字符串的大小写转换
-
capitalize(): 返回原字符串的副本,其首个字符大写,其余为小写
-
upper(): 全部转为大写
-
lower(): 全部转为小写
-
title(): 每个单词的首字母大写
- 代码示例
-
print("capitalize():" + "abc".capitalize()) print("upper():" + "abc".upper()) print("lower():" + "ABC".lower()) print("title():" + "capitalize upper lower title".title())
- 运行结果
- 运行结果
-
- 代码示例
-
-
字符串的空格操作
-
ljust(width,fillchar): 让字符串以指定长度显示,如果长度不够,默认在右边使用空格补齐
- width:长度
- fillchar:填充字符,模式是空格
-
rjust(width,fillchar): 和ljust()效果一样,只不过是填充在了左边
-
center(width,fillchar): 和以上两种说明都是一样的,只不过把内容填充到两把,把内容居中了
-
lstrip(): 去掉左边的空格
-
rstrip(): 去掉右边的空格
-
strip(): 去掉两边的空格
- 代码示例
-
print("ljust():" + "abc".ljust(10,"=")) print("rjust():" + "abc".rjust(10,"+")) print("lstrp():" + ' abc '.lstrip()) print("rstrip():" + ' abc '.rstrip()) print("strip():" + ' abc '.strip())
- 运行结果
- 运行结果
-
- 代码示例
-
-
列表转换成字符串
- join(): 将列表转为字符串
- 代码示例
-
a=['a','b','c','d'] print('-'.join(a)) # 以 '-' 字符为分割,将列表中的数据拼接成一个字符串
- 运行结果
- 运行结果
-
- 代码示例
- join(): 将列表转为字符串