字符串常见操作
- 1.切片
- 2. 查询(find,index)
- 3. 大小写转换(upper、lower、swapcase、capitalize和title)
- 4. 对齐(center,just和zfill)
- 5. 分割(split、splitlines和partition)
- 6. 连接合并与替换(join,replace)
- 7. 判断(isidentifier、isspace、isalpha、isdecimal、isnumeric和isalnum等)
- 8. 比较(<,>,==,!=max,min等)
- 9. 去除两端多余字符操作(strip,ltrip,rtrip)
- 10. 判断开头结尾字符串(startswith,endswith)
- 11. 字符串计数(count,len)
- 12. 字符串的编码与解码(encode,decode)
- 13. 字符串的枚举遍历(enumerate)
1.切片
- 切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
- 切片的语法:[起始:结束:步长],也可以简化使用 [起始:结束]
注意:选取的区间从"起始"位开始(从0开始),到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔。 - 索引是通过下标取某一个元素
- 切片是通过下标去某一段元素
s = 'Hello World!'
print(s[4])
print(s)
print(s[3:7]) # 结果元素里包含下标 3,不含下标 7
print(s[:]) # 取出所有元素(没有起始位和结束位之分),默认步长为1
print(s[1:]) # 从下标为1开始,取出 后面所有的元素(没有结束位)
print(s[:5]) # 从起始位置开始,取到 下标为5的前一个元素(不包括结束位本身)
print(s[:-1]) # 从起始位置开始,取到 倒数第一个元素(不包括结束位本身)
print(s[-4:-1]) # 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身)
print(s[1:5:2]) # 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)
# python 字符串快速逆置
print(s[::-1]) # 从后向前,按步长为1进行取值 ,逆向取值类似reversed(输出结果为可迭代列表)
print([x for x in reversed(s)])
结果
o
Hello World!
lo W
Hello World!
ello World!
Hello
Hello World
rld
el
!dlroW olleH
['!', 'd', 'l', 'r', 'o', 'W', ' ', 'o', 'l', 'l', 'e', 'H']
2. 查询(find,index)
- find :检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回**-1**
- 语法:mystr.find(str, start=0, end=len(mystr)), 默认从0开始至字符串尾结束。
mystr = 'hello world and my sun'
print(mystr.find('world'))
print(mystr.find('world',0,5))
结果:
6
-1
- index :跟find()方法一样,只不过如果str不在 mystr中会报一个异常.
- 语法:mystr.index(str, start=0, end=len(mystr)), 默认从0开始至字符串尾结束。
print(mystr.index('world'))
print(mystr.index('world',0,5))
结果:
6
ValueError Traceback (most recent call last)
in
1 print(mystr.index(‘world’))
----> 2 print(mystr.index(‘world’,0,5))
ValueError: substring not found
3. 大小写转换(upper、lower、swapcase、capitalize和title)
str = "Hello World and my world"
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.swapcase()) # 把所有字符中的大写字母互换
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
结果
HELLO WORLD AND MY WORLD
hello world and my world
hELLO wORLD AND MY WORLD
Hello world and my world
Hello World And My World
4. 对齐(center,just和zfill)
print('一夜暴富'.center(10)+'*'*10) #居中对应
print('一夜暴富'.rjust(10)+'*'*10) #右对齐
print('一夜暴富'.ljust(10)+'*'*10) #左对齐
print('一夜暴富'.zfill(10)+'*'*10) #右对齐,不够用0填充
结果
一夜暴富 **********
一夜暴富**********
一夜暴富 **********
000000一夜暴富**********
重在场景 zfill 的函数的妙处在于对用0填充补齐后的文本替换,以避免原文本中的空格被误操作,所以结合replace操作会更好的发挥它的作用。
5. 分割(split、splitlines和partition)
- 方法一:str.split
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,通过该分割操作后,会返回一个列表。
s = 'a b c.d ad'
print(s.split(' '))
结果
['a', 'b', 'c.d', 'ad']
- 方法二:re.split
使用多个字符进行字符串分割
#多字符切割需导入 re
import re
e = "123456@qq.com"
re.split('@|\.',e)
结果['123456', 'qq', 'com']
splitlines()
- 简介
该函数不需要参数,默认以行(\n)为单位进行分割,返回值是一个包含分割后字符串的列表,列表的长度则取决于完整字符串的行数 - 用途
splitlines() 函数以行(\n)为单位对完整字符串进行分割,相当于函数split(’/n’) - 用法
str.splitlines() 同 str.splite(‘\n’),若为True,保留分隔符。
mystr = 'hello\nworld\nand\nhello\npython'
print(mystr.splitlines())
print(mystr.split('\n'))
print(mystr.splitlines(True))
结果
['hello', 'world', 'and', 'hello', 'python']
['hello', 'world', 'and', 'hello', 'python']
['hello\n', 'world\n', 'and\n', 'hello\n', 'python']
partition
对字符串分割,返回三元组。若被切割字符为空,则被分割字符串放最前,后面2个字符串为空。
str='abcde'
print(str.partition('b'))
print(str.partition('f'))
结果
('a', 'b', 'cde')
('abcde', '', '')
6. 连接合并与替换(join,replace)
- 连接一: “+”
s1='ab'
s2='cd'
S3='@'
s1+S3+s2
结果:'ab@cd'
- 连接一: join
- 1.例一
s1='abcd'
s3='@'
s3.join(s1)
结果
'a@b@c@d'
- 2.例二
s1=['ab','cd']
s3='@'
s3.join(s1)
结果
'ab@cd'
注意:join 是对字符串内容元素间增加对应内容,列表\元组、字典均适用,但数字格式的不适用哦,因为它实际中也没啥意义。
- replace
- 把 字符串 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.
注:这个跟步长为-1从末尾开始切片还是不一样的哦。如果想对字符串替换最后一个或几个,可考虑字符串步长-1切片反转,替换后再反转回去。
7. 判断(isidentifier、isspace、isalpha、isdecimal、isnumeric和isalnum等)
- isidentifier: 关键字或 标识符1
print('if'.isidentifier()) # 关键字
print('break'.isidentifier()) # 关键字
print('while'.isidentifier()) # 关键字
print('_b'.isidentifier()) # 下划线开头
print('西安工程大学886'.isidentifier()) # 字符开头
print('886'.isidentifier()) # 数字开头
print('8a'.isidentifier()) # 数字开头
print(''.isidentifier()) # 空字符
结果
True
True
True
True
True
False
False
False
- isspace:是否空格 。
print(''.isspace())
print(' '.isspace()) #空格
print(' ab'.isspace())
结果
False
True
False
- isalpha:是否字母组合 。
print(''.isalpha())
print('abc'.isalpha()) #字母
print('abc.@'.isalpha())
结果
False
True
False
- isdecimal:字符串是否只包含十进制字符。这种方法只存在于unicode对象。
a='123'
b='0o377'#8进制
c='123.123' #有小数点
print(''.isdecimal()) #空
print(a.isdecimal())
print(b.isdecimal())
print(c.isdecimal())
结果
False
True
False
False
- isnumeric:是否数字类型。
a='123'
b='0o377'#8进制
c='123.123' #小数
print(''.isnumeric()) #空
print(a.isnumeric())
print(b.isnumeric())
print(c.isnumeric())
结果
False
True
False
False
- isalnum: 是否字母或数字的组合。
a='123' #数字
b='0o377'#8进制
c='c123' #字母+数字
d='c123.123' #字母+数字+小数
print(''.isalnum()) #空
print(a.isalnum())
print(b.isalnum())
print(c.isalnum())
print(d.isalnum())
结果
False
True
True
True
False
8. 比较(<,>,==,!=max,min等)
- 这个有些简单了哈,我只粗略说一下。针对个别示例如下:
a='s'
b='s'
print(a!=b)
print(a==b)
结果
False
True
9. 去除两端多余字符操作(strip,ltrip,rtrip)
- strip: 用来去除头尾字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)
- lstrip:用来去除开头字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)
- rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)
- 注意:这些函数都只会删除头和尾的字符,中间的不会删除。(一般都结合split()方法使用,返回一个列表list)
例:
a=' abc efg '
print(a.strip())
print(a.lstrip())
print(a.rstrip())
结果:
abc efg
abc efg
abc efg
10. 判断开头结尾字符串(startswith,endswith)
- startsWith()方法用来判断当前字符串是否是以另外一个给定的子字符串“开头”的,根据判断结果返回 true 或 false。 string.startsWith(suffix[, start[, end]])
- endswirh() 方法用来判断当前字符串是否是以另外一个给定的子字符串“结尾”的,根据判断结果返回 true 或 false。string.endswith(suffix[, start[, end]])
print(a.startswith(' ',0)) ##从第一个字符开始
print(a.startswith(' ',4)) ##从第5个字符开始
print(a.startswith(' ',1)) ##从第2个字符开始
print(a.endswith(' ',0)) ##从第0个字符开始
print(a.endswith(' ',-1)) ##从第最后一个字符开始
结果:
True
True
False
True
True
11. 字符串计数(count,len)
- count:函数用于统计字符串里某个子字符串出现的次数。
- 语法: S.count(sub[, start[, end]]) -> int
- 参数
sub: 搜索的子字符串。
start: 可选参数,开始搜索的位置。
end: 可选参数,结束搜索的位置。 - 返回值
子字符串在字符串中出现的次数。
例:
str = 'abcabcd'
print('统计单个字符出现的次数:', str.count('a'))
print('统计单个字符出现的次数:', str.count('a', 1))
print('统计单个字符出现的次数:', str.count('a', 1, 3))
print('统计子字符串出现的次数:', str.count('ab'))
print('统计子字符串出现的次数:', str.count('df'))
结果:
统计单个字符出现的次数: 2
统计单个字符出现的次数: 1
统计单个字符出现的次数: 0
统计子字符串出现的次数: 2
统计子字符串出现的次数: 0
- len:返回文本字符串中的字符数.
- 语法格式为Len(text)
str = 'abcabcd'
print(len(str))
结果:
`7`
12. 字符串的编码与解码(encode,decode)
- encode: 用于使用指定的编码格式对字符串进行编码。
- 语法:encode(encoding=‘utf-8’, errors=‘strict’)
- 参数
encoding: 编码格式,默认为‘utf-8’。
errors: 不同错误的处理方案,默认值为strict。
strict:遇到非法字符就抛出异常。
ignore:忽略非法字符。
replace:用“?”替换非法字符。
xmlcharrefreplace:使用 xml 的字符引用。 - 返回值
编码后的字符串。
示例:
str = '我爱我的爸妈'
print('默认为utf-8编码:', str.encode())
print('utf-8明示编码:', str.encode('UTF-8'))
print('GBK编码:', str.encode('GBK', 'strict'))
结果:
默认为utf-8编码: b'\xe6\x88\x91\xe7\x88\xb1\xe6\x88\x91\xe7\x9a\x84\xe7\x88\xb8\xe5\xa6\x88'
utf-8明示编码: b'\xe6\x88\x91\xe7\x88\xb1\xe6\x88\x91\xe7\x9a\x84\xe7\x88\xb8\xe5\xa6\x88'
GBK编码: b'\xce\xd2\xb0\xae\xce\xd2\xb5\xc4\xb0\xd6\xc2\xe8'
- decode:使用注册编码(codec)的编解码器解码字符串。它默认是默认字符串编码。
- 语法:str.decode(encoding = ‘UTF-8’,errors = ‘strict’)
- 参数
encoding: 编码格式,默认为‘utf-8’。
errors: 不同错误的处理方案,默认值为strict。
strict:遇到非法字符就抛出异常。
ignore:忽略非法字符。
replace:用“?”替换非法字符。
xmlcharrefreplace:使用 xml 的字符引用。 - 返回值
解码后的字符串。
例:
str1=b'\xe6\x88\x91\xe7\x88\xb1\xe6\x88\x91\xe7\x9a\x84\xe7\x88\xb8\xe5\xa6\x88'
str2=b'\xce\xd2\xb0\xae\xce\xd2\xb5\xc4\xb0\xd6\xc2\xe8'
print('默认为utf-8编码:', str1.decode())
print('utf-8明示编码:', str1.decode('UTF-8'))
print('GBK编码:', str2.decode('GBK', 'strict'))
结果:
默认为utf-8编码: 我爱我的爸妈
utf-8明示编码: 我爱我的爸妈
GBK编码: 我爱我的爸妈
13. 字符串的枚举遍历(enumerate)
- enumerate:用于获取字符串的索引与索引对应的字符
-例:
s = 'Hello World!'
for i,m in enumerate(s):
print(i,m)
结果
0 H
1 e
2 l
3 l
4 o
5
6 W
7 o
8 r
9 l
10 d
11 !
- 标识符:在Python中凡是自定义的一些符和名称都叫标识符
命名规则:
1)只能包含字母、数字、下划线;
2)数字不能开头;
3)不能包含Python的关键字;
4)标识符没有长度限制;
5)区分大小写。
命名的原则:见名知意,如:age,name
常量名使用大写的单个单词或由下划线连接多个单词模块名
函数名使用小写的单个单词或由下划线连接的多个单词
类名使用大写字母开头的单个或多个单词 ↩︎