今天为大家介绍的是Python中内置数据结构之一,字符串,以下为学习参考代码。
# 机构:家里蹲
# 作者:青灬火
# 时间:2021/7/19 7:29
'''
字符串的驻留机制
在python中字符串是基本数据类型,是一个不可变的字符序列
驻留机制:
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,
Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,
不会开辟新的空间,而是把该字符串的地址赋给新创建的变量
'''
a = 'Python'
a1 = "Python"
a2 = '''Python'''
print(a, id(a)) #Python 2549899614128
print(a1, id(a1)) #Python 2549899614128
print(a2, id(a2)) #Python 2549899614128
'''
字符串驻留机制的优缺点:
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,
因此拼接字符串和修改字符串是会比较影响性能的
在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,
然后再拷贝,只new一次对象,效率要比"+"效率高
'''
#字符串的常用操作
'''
字符串的查询操作方法
index(): 查找子串substr第一次出现的位置,如果查找的字串不存在时,则抛出ValueError
rindex(): 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则抛出ValueError
find(): 查找子串substr第一次出现的位置,如果查找的字串不存在时,则返回 -1
rfind(): 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则返回 -1
'''
s = 'helloWorld'
print(s.index('l')) #2
print(s.find('l')) #2
print(s.rindex('l')) #8
print(s.rfind('l')) #8
#print(s.index('5')) #ValueError: substring not found
#print(s.rindex('5')) #ValueError: substring not found
print(s.find('5')) # -1
print(s.rfind('5')) # -1
'''
字符串大小写转换操作的方法
upper(): 把字符串中所有字符都转成大写字母
lower(): 把字符串中所有字符都转成小写字母
swapcase(): 把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母
capitalize(): 把第一个字符转换为大写,把其余字符转换为小写
title(): 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
'''
s = 'hello, python'
a = s.upper()
print(a) #HELLO, PYTHON
b = a.lower()
print(b) #hello, python
s = 'hello, PYTHON'
print(s.swapcase()) #HELLO, python
print(s.capitalize()) #Hello, python
print(s.title()) #Hello, Python
'''
字符串内容对其操作的方法
center(): 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
如果设置宽度小于实际宽度则返回原字符串
ljust(): 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
如果设置宽度小于实际宽度则返回原字符串
rjust(): 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
如果设置宽度小于实际宽度则返回原字符串
zfill(): 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
'''
s = 'hell0,Python'
s1 = s.center(20, '*')
print(s1) #****hell0,Python****
s1 = s.ljust(20, '*')
print(s1) #hell0,Python********
s1 = s.rjust(20, '*')
print(s1) #********hell0,Python
print(s) #hell0,Python
s1 = s.zfill(20)
print(s1) #00000000hell0,Python
s1 = s.center(5, '*')
print(s1) #hell0,Python
s1 = s.ljust(5, '*')
print(s1) #hell0,Python
s1 = s.rjust(5, '*')
print(s1) #hell0,Python
print(s) #hell0,Python
s1 = s.zfill(5)
print(s1) #hell0,Python
'''
字符串劈分操作的方法
split(): 从字符串的左边开始劈分,默认的劈分字符时空格字符串,返回值是一个列表
以通过参数sep指定劈分字符串的是劈分符
通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字符串会单独做为一部分
rsplit(): 从字符串的右边开始劈分,默认的劈分字符时空格字符串,返回值是一个列表
以通过参数sep指定劈分字符串的是劈分符
通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字符串会单独做为一部分
'''
s = 'hello world python'
s1 = s.split()
print(s1) #['hello', 'world', 'python']
s = 'hello|world|python'
s1 = s.split()
print(s1) #['hello|world|python']
s1 = s.split('|')
print(s1) #['hello', 'world', 'python']
s1 = s.split(sep='|', maxsplit=2)
print(s1) #['hello', 'world|python']
s = 'hello world python'
s1 = s.rsplit()
print(s1) #['hello', 'world', 'python']
s = 'hello|world|python'
s1 = s.rsplit('|')
print(s1) #['hello', 'world', 'python']
s1 = s.rsplit('|', 1)
print(s1) #['hello|world', 'python']
'''
判断字符串的方法
isidentifier(): 判断指定的字符串是不是合法的标识符
isspace(): 判断指定的字符串是否全部由空白字符组成(回车,换行,水平制表符)
isalpha(): 判断指定的字符串是否全部由字母组成
isdecimal(): 判断指定字符串是否全部有十进制的数字组成
isnumeric(): 判断指定的字符串是否全部由数字组成
isalnum(): 判断指定字符串是否全部由字母和数字组成
'''
s = 'hello,python'
print(s.isidentifier()) #False 合法的标识符时数字,字母,下划线,不包括逗号
print(s.isspace()) #False
print(s.isalpha()) #False
print(s.isnumeric()) #False
print(s.isalnum()) #False
s = ' '
print(s.isspace()) #True
s = 'asfsag'
print(s.isalpha()) #True
print(s.isalnum()) #True
s = '1234567890'
print(s.isnumeric()) #True
print(s.isalnum()) #True
print(s.isdecimal()) #True
s = 'afasf1543'
print(s.isalnum()) #True
'''
replace(): 第一个参数指定被替换的子串,第二个参数指定替换字串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,
调用该方法时可以通过第三个参数指定最大替换次数
join(): 将列表或元组中的字符串合并成一个字符串
'''
s = 'hello,python'
s1 = s.replace('python', 'java')
print(s) #hello,python
print(s1) #hello,java
s = 'hello,python,python,python'
s1 = s.replace('python', 'jave', 2)
print(s1) #hello,jave,jave,python
lst = ['hello', 'java', 'python']
print('|'.join(lst)) #hello|java|python
print(''.join(lst)) #hellojavapython
t = ('hello', 'java', 'python')
print(''.join(t)) #hellojavapython
print('*'.join('Python')) #P*y*t*h*o*n
#字符串的比较
print('apple' > 'app') #True
print('apple' > 'banana') #False
#字符串的切片操作
'''
字符串时不可变类型
不具备增删该操作
切片操作将产生新的对象
'''
s = 'hello,python'
print(s[:5]) #hello
print(s[6:]) #python
print(s[1:5:1]) #ello 从1开始截到5(不包含5),步长为1
print(s[1:5:2]) #el 从1开始截到5(不包含5),步长为2
print(s[::2]) #hlopto 从头开始到结尾,步长为2
print(s[::-1]) #nohtyp,olleh
#格式化字符串
'''
两种方式
%做占位符
%s 字符串
%i或%d 整数
%f 浮点数
{}作占位符
'''
s = '我的名字叫:%s, 今年%d岁了'
print(s % ('Sam', 27)) #我的名字叫:Sam, 今年27岁了
s = '我的名字叫:{0}, 今年{1}岁了, 英文名是:{0}'
print(s.format('Sam', 27)) #我的名字叫:Sam, 今年27岁了, 英文名是:Sam
#f-string
name = 'Sam'
age = 27
print(f'我的名字叫:{name}, 今年{age}岁了') #我的名字叫:Sam, 今年27岁了
print('%d' % 99) #99
print('%10d' % 99) # 99 10代表宽度
print('%f' % 3.141592) #3.141592
print('%.3f' % 3.141592) #3.142 保留小数点后三位
print('%10.3f' % 3.141592) # 3.142 总宽度为10,小数点后三位
print('{0}'.format(3.1415926)) #3.1415926
print('{0:.3}'.format(3.1415926)) #3.14 三位数字
print('{0:.3f}'.format(3.1415926)) #3.142 三位小数
print('{0:10.3f}'.format(3.1415926)) # 3.142 宽度为10,三位小数
#字符串的编码转换
'''
编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型的数据转换成字符串类型
'''
s = '人生艰难,猫猫叹气'
print(s.encode('GBK')) #b'\xc8\xcb\xc9\xfa\xbc\xe8\xc4\xd1\xa3\xac\xc3\xa8\xc3\xa8\xcc\xbe\xc6\xf8' 在GBK的编码格式中,一个中文占两个字节
print(s.encode('UTF-8')) #b'\xe4\xba\xba\xe7\x94\x9f\xe8\x89\xb0\xe9\x9a\xbe\xef\xbc\x8c\xe7\x8c\xab\xe7\x8c\xab\xe5\x8f\xb9\xe6\xb0\x94'
#在UTF-8的编码格式中,一个中文占三个字节
print(s.encode('GBK').decode('GBK')) #人生艰难,猫猫叹气
print(s.encode('UTF-8').decode('UTF-8')) #人生艰难,猫猫叹气
扫码关注公众号“JAVA记录册”
该公众号致力于为大家分享工作中会用到一些简单实用的小知识,而不是那些悬在云端的高大上但又感觉空泛的文章,欢迎大家关注,谢谢!