方法名称 | 作用 |
---|---|
index() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
rindex() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
find() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1 |
rfind() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1 |
s = 'hello,hello'
print(s.index('lo')) # 3
print(s.find('lo')) # 3
print(s.rindex('lo')) # 9
print(s.rfind('lo')) # 9
# print(s.index('k')) # ValueError: substring not found
print(s.find('k')) # -1
# print(s.rindex('k')) # ValueError: substring not found
print(s.rfind('k')) # -1
方法名称 | 作用 |
---|---|
upper() | 把字符串中所有字符都转换成大写字母 |
lower() | 把字符串中所有字符都转换成小写字母 |
swapcase() | 把字符串中所有大写字母转换为小写字母,把所有小写字母转换为大写字母 |
capitalize() | 把第一个字符转换为大写,把其余字符转换为小写 |
title() | 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写 |
s='hello,python'
a=s.upper() # 转换成大写之后,会产生一个新的字符串对象
print(a,id(a)) #HELLO,PYTHON 1792337784432
print(s,id(s)) #hello,python 1792337784240
b=s.lower() # 转换之后,会产生一个新的字符串对象
print(b,id(b)) #hello,python 1792338138864
print(s,id(s)) #hello,python 1792337784240
print(b==s) #True
print(b is s) #False
s2='hello,Python'
print(s.swapcase()) # HELLO,PYTHON
print(s.title()) # Hello,Python
方法名称 | 作用 |
---|---|
center() | 居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
ljust() | 左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
rjust() | 右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
zfill() | 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身 |
s='hello,Python'
'''剧居中对齐'''
print(s.center(20,'*')) # ****hello,Python****
'''左对齐'''
print(s.ljust(20,'*')) # hello,Python********
print(s.ljust(10)) # hello,Python
print(s.ljust(20)) # hello,Python
'''右对齐,使用0填充'''
print(s.zfill(20)) # 00000000hello,Python
print(s.zfill(10)) # hello,Python
print('-8910'.zfill(8)) #-0008910
方法名称 | 作用 |
---|---|
split() | 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 |
split() | 以通过参数sep指定劈分字符串似的劈分符 |
split() | 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分 |
rsplit() | 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 |
rsplit() | 以通过参数sep指定劈分字符串似的劈分符 |
rsplit() | 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分 |
s='hello world Python'
lst=s.split()
print(lst) #['hello', 'world', 'Python']
s1='hello|world|Python'
print(s1.split(sep='|')) #['hello', 'world', 'Python']
print(s1.split()) #['hello|world|Python'] split()默认劈分符为空格
print(s1.split(sep='|',maxsplit=1)) #['hello', 'world|Python']
'''rsplit()从右侧开始劈分'''
print(s.rsplit()) #['hello', 'world', 'Python']
print(s1.rsplit('|')) #['hello', 'world', 'Python']
print(s1.rsplit(sep='|',maxsplit=1)) #['hello|world', 'Python']
方法名称 | 作用 |
---|---|
isidentifier() | 判断指定的字符串是不是合法的标识符 |
isspace() | 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符) |
isalpha() | 判断指定的字符串是否全部由字母组成 |
isdecimal() | 判断指定的字符串是否全部由十进制的数字组成 |
isnumeric() | 判断指定的字符串是否全部由数字组成 |
isalnum() | 判断指定的字符串是否全部由字母和数字组成 |
1、合法的字符串是“字母、数字、下划线_”,逗号不包含在内
s='hello,python'
print('1.',s.isidentifier()) #1. False
print('2.','hello'.isidentifier()) #2. True
print('3.','张三_'.isidentifier()) #3. True
print('4.','张三_123'.isidentifier()) #4. True
print('5.','\t'.isspace()) #5. True
print('6.','abc'.isalpha()) #6. True
print('7.','张三'.isalpha()) #7. True
print('8.','张三1'.isalpha()) #8. False
print('9.','123'.isdecimal()) #9. True
print('10.','123四'.isdecimal()) #10. False
print('11.','ⅡⅡⅢ'.isdecimal()) #11. False
print('12.','123'.isnumeric()) #12. True
print('13.','123四'.isnumeric()) #13. True
print('14.','ⅡⅡⅢ'.isnumeric()) #14. True
print('15.','abc1'.isalnum()) #15. True
print('16.','张三123'.isalnum()) #16. True
print('17.','abc!'.isalnum()) #17. False
功能 | 方法名称 | 作用 |
---|---|---|
字符串替换 | replace() | 第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法是可以通过第3个参数指定最大替换次数 |
字符串的合并 | join() | 将列表或元组中的字符串合并成一个字符串 |
s='hello,Python'
print(s.replace('Python','Java')) #hello,Java
s1='hello,python,python,python'
print(s1.replace('python','java',2)) #hello,java,java,python
lst=['hello','java','python']
print('|'.join(lst)) #hello|java|python
print(''.join(lst)) #hellojavapython
t=('hello','python','java')
print(''.join(t)) #hellopythonjava
print('*'.join('python')) #p*y*t*h*o*n
print('apple'>'app') #True
print('apple'>'banana') #False
print(ord('a'),ord('b')) #97 98
print(ord('是')) #26159
print(chr(97),chr(98)) #a b
print(chr(26159)) #是
'''
== 与 is 的区别
==:比较的是value
is:比较的是id是否相等
'''
a=b='python'
c='python'
print(a==b) #True
print(b==c) #True
print(a is b) #True
print(a is c) #True
print(id(a)) #2093415080560
print(id(b)) #2093415080560
print(id(c)) #2093415080560
字符串是不可变类型
s='hello,Python'
s1=s[:5] #由于没有指定起始位置,所以从0开始切
s2=s[6:] #由于没有指定结束位置,所以切到字符串的最后一个元素
s3='!'
newstr=s1+s2+s3
print(s1) #hello
print(s2) #Python
print(newstr) #helloPython!
'''切片[start:end:step]'''
print(s[1:5:1]) #ello 从1开始截到5(不包含5),步长为1
print(s[::2]) #hloPto 默认从0开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素质检的索引间隔为2
print(s[::-1]) #nohtyP,olleh 默认从字符串的
print(s[-6::1]) #Python
格式化字符串的两种方式:
%占位符
例:
‘我的名字叫:%s,今年%d岁了’ % (name,age)
说明:
‘我的名字叫:%s,今年%d岁了’——定义的格式化字符串;
%——固定符号
(name,age)——占位符实际值
{}做占位符
例:
‘我的名字叫:{0},今年{1}岁了,我真的叫{0}’.format(name,age)
# 格式化字符串
#1、 % 占位符
name = '张三'
age = 20
print('我叫%s,今年%d岁' % (name,age)) # 我叫张三,今年20岁
# 2、 {}
print('我叫{0},今年{1}岁'.format(name,age)) # 我叫张三,今年20岁
# 3、 f-string
print(f'我叫{name},今年{age}岁') # 我叫张三,今年20岁
# 精度和宽度——%
print('%10d' % 99) # 99; 10表示的是宽度
print('%.3f' % 3.1415926) #3.142; 3表示小数点后3位
# 同时表示宽度和精度
print('%10.3f' % 3.1415926) # 3.142; 一共总宽度为10.小数点后保留3位
print('hellohello') #hellohello;
# 精度和宽度——{}
print('{0:.3}'.format(3.1415926)) #3.14; .3表示一共是3位数;{}中0表示占位符的顺序
print('{0:.3f}'.format(3.1415926)) #3.142; .3f表示保留3位小数;{}中0可以省略
print('{:10.3f}'.format(3.1415926)) # 3.142; 同时设置宽度和精度,一共是10位,3位是小数
- 编码与解码的方式
s = '天涯共此时'
#编码
print(s.encode(encoding='GBK')) #b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1' ——第一个b表示二进制
#在GBK这种编码格式中,一个中文占两个字符;
print(s.encode(encoding='UTF-8')) #b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
#在UTF-8这种编码格式中,一个中文占三个字符
#解码
#byte代表就是一个二进制数据(字节类型的数据)
byte=s.encode(encoding='GBK') #编码
print(byte.decode(encoding='GBK')) #解码 天涯共此时
# 编码和解码格式必须相同
byte=s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8')) #天涯共此时