字符串
字符串的创建与驻留机制
-
字符串:在Python中字符串是基本数据类型,是一个不可变的字符序列。 -
驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋给新创建的变量。 -
驻留机制的几种情况(交互模式)
- 字符串的长度为0或1时
- 符合标识符的字符串(含有字母数字下划线)
- 字符串只在编译时进行驻留,而非运行时
- [-5,256]之间的整数数字
-
sys中的intern方法强制2个字符串指向同一个对象 -
pycharm对字符串进行了优化处理 -
字符串驻留机制的优缺点
- 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
- 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。
a='python'
b="python"
c='''python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
s1='abc%'
s2='abc%'
print(s1 is s2)
字符串的常用操作
字符串的查询操作的方法
'''字符串的查询操作'''
s='hello,hello'
print(s.index('lo'))
print(s.find('lo'))
print(s.rindex('lo'))
print(s.rfind('lo'))
print(s.find('k'))
print(s.rfind('k'))
'''所以建议使用find(),或者rfind()'''
字符串的大小写转换操作的方法
'''字符串的大小写转换操作'''
s='hello,python'
print(s,id(s))
a=s.upper()
print(a,id(a))
b=s.lower()
print(b,id(b))
print(s is b)
print(s==b)
s2='hello,Python'
print(s2.swapcase())
print(s2.title())
print(s2.capitalize())
字符串内容对齐操作的方法
'''字符串内容对齐操作的方法'''
s='hello,python'
s1=print(s.center(20,'*'))
s2=print(s.ljust(20,'*'))
print(s.ljust(10,'*'))
print(s.ljust(20))
s3=print(s.rjust(20,'*'))
print(s.zfill(20))
print('-8910'.zfill(8))
判断字符串操作的方法
'''判断字符串操作的方法'''
s='hello,python'
print('1.',s.isidentifier())
print('2.','hello'.isidentifier())
print('3.','张三_123'.isidentifier())
print('5.','\t'.isspace())
print('6.','wyx1'.isalpha())
print('7.','张三'.isalpha())
print('8.','1234'.isdecimal())
print('9.','123四'.isdecimal())
print('10.','ⅠⅡ Ⅲ'.isdecimal())
print('11.','123'.isnumeric())
print('12.','张三11'.isnumeric())
print('13.','123'.isalnum())
print('14.','12ab_'.isalnum())
print('15.','张三123'.isalnum())
字符串操作的其他方法
'''字符串替换
replace():第一个参数指定被替换的字串,第2个参数指定替换字串的字符串,
该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第三个参数指定最大替换次数'''
s='hello,Python'
print(s.replace('Python','Java'))
s1='hello,python,python,python'
print(s1.replace('python','Java',2))
'''字符串的合并
join():将列表或者元组中的字符串合并成一个字符串'''
lst=['hello','java','python']
print('|'.join(lst))
print(''.join(lst))
t=('hello','Java','python')
print(''.join(t))
print('*'.join('hello'))
字符串的比较操作
print('apple'>'app')
print('apple'<'banana')
print(ord('a'),ord('b'))
print(chr(97),chr(98))
print(ord('王'))
'''==与is的区别
==比较的是value
is比较的时候id是否相等'''
a=b='Python'
c='Python'
print(a==b)
print(b==c)
print(a is b)
print(a is c)
print(id(a))
print(id(b))
print(id(c))
字符串的切片操作
s='hello,Python'
s1=s[:5]
print(s1)
s2=s[6:]
print(s2)
s3='!'
newstr=s1+s3+s2
print(newstr)
print('-----------------------切片[start:end:step]---------------')
print(s[1:5:1])
print(s[::2])
print(s[::-1])
print(s[-6::1])
格式化字符串
格式化字符串的两种方式:
-
%作占位符: %s:字符串 %i或%d:整数 %f:浮点数 -
{}作占位符
name='张三'
age=20
print('我叫%s,今年%d岁' % (name,age))
print('我叫{0},今年{1}岁'.format(name,age))
print(f'我叫{name},今年{age}岁')
print('%10d' %99)
print('%.3f' %3.1415926)
print('%10.3f' %3.1415926)
print('{0:.3}'.format(3.1415926))
print('{:.3f}'.format(3.1415926))
print('{:10.3f}'.format(3.1415926))
这里记忆起来可能会混乱,建议只记忆(‘%10.3f’ % )的形式
字符串的编码转换
编码与解码的方式:
- 编码:将字符串转换为二进制数据(bytes)
- 解码:将bytes类型转换成字符串类型
s='天涯共此时'
print(s.encode(encoding='GBK'))
print(s.encode(encoding='UTF-8'))
byte=s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))
byte=s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))
|