字符串的驻留机制
在Python中 字符串是基本数据类型,是一个不可变类型 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
驻留机制的几种情况
字符串的长度为0或1时 符合标识符的字符串 字符串只在编译时进行驻留,而非运行时 [-5,256]之间的整数数字
s1 = ''
s2 = ''
print ( s1 is s2)
s1 = '%'
s2 = '%'
print ( s1 is s2)
s1 = 'abc%'
s2 = 'abc%'
print ( s1 is s2)
s1 = 'abc'
s2 = 'abc'
print ( s1 is s2)
a = 'abc'
b = 'ab' + 'c'
c = '' . join( [ 'ab' , 'c' ] )
print ( a is b)
print ( a is c)
sys中的intern方法强制2个字符串指向同一个对象
a = sys. intern ( b)
print ( a is b)
字符串的常用操作
字符串的查询操作方法
index() : 查找子串第一次出现的位置,如果在查找的子串不存在,抛出ValueError rindex() : 查找子串最后一次出现的位置,如果在查找的子串不存在,抛出ValueError find() : 查找子串第一次出现的位置,如果在查找的子串不存在,返回-1 rfind() : 查找子串最后一次出现的位置,如果在查找的子串不存在,返回-1
str1 = 'HelloPython'
print ( str1. index( 'H' ) )
print ( str1. rindex( 'o' ) )
print ( str1. find( 'H' ) )
print ( str1. find( 'a' ) )
print ( str1. rfind( 'o' ) )
print ( str1. rfind( 'a' ) )
字符串的大小写转换操作的方法
upper() : 把字符串中所有字符都转成大写字母 lower() : 把字符串中所有字符都转成小写字母 swapcase() : 把字符串中所有大写字母转成小写字母,把小写字母都转成大写字母 capitalize() : 把第一个字符转换为大写,把其余字符转换为小写 title() : 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
str1 = 'Hello python'
str2 = 'hello PyThon'
print ( str1. upper( ) )
print ( str1. lower( ) )
print ( str1. swapcase( ) )
print ( str2. capitalize( ) )
print ( str2. title( ) )
字符串内容对齐操作的方法
center() : 居中对齐
第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 ljust() : 左对齐
第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 rjust() : 右对齐
第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 zfill() : 右对齐
左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果设置宽度小于等于实际宽度则返回原字符串
str1 = 'Hello python'
print ( str1. center( 20 ) )
print ( str1. ljust( 20 ) , '---' )
print ( str1. rjust( 20 ) )
print ( str1. zfill( 20 ) )
字符串拆分操作的方法
split()
从字符串的左边开始拆分,默认的拆分字符是空格字符串,返回的值都是一个列表 以通过参数sep指定拆分字符串是拆分符 rsplit()
从字符串的右边开始拆分,默认的拆分字符是空格字符串,返回的值都是一个列表 以通过参数sep指定拆分字符串是拆分符
str1 = 'Hello python'
str2 = 'hello|world|python'
print ( str1. split( ) )
print ( str1. split( sep= 'l' ) )
print ( str2. split( sep= '|' ) )
print ( str2. rsplit( sep= '|' ) )
print ( str2. rsplit( sep= '|' , maxsplit= 1 ) )
判断字符串操作的方法
isidentifier() : 判断指定的字符串是不是合法的标识符 isspace() : 判断指定的字符串是否全部由空白字符组成 isalpha() : 判断指定的字符串是否全部由字母组成 isdecimal() : 判断指定字符串是否全部由十进制的数字组成 isnumeric() : 判断指定的字符串是否全部由数字组成 isalnum() : 判断指定字符串是否全部由字母和数字组成
s1 = 'kdfd'
print ( s1. isidentifier( ) )
print ( '\t' . isspace( ) )
print ( s1. isalpha( ) )
print ( '123' . isdecimal( ) )
print ( '123' . isnumeric( ) )
print ( '123dfdf' . isalnum( ) )
字符串操作的其他方法
字符串替换 : replace(), 第一个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数 字符串的合并 : join(), 将列表或元组中的字符串合并成一个字符串
s1 = 'abcdefg'
s2 = s1. replace( 'abc' , 'ABC' )
print ( '原字符串:' , s1)
print ( '替换后的字符串:' , s2)
l1 = [ 'hello' , 'python' , '123' ]
print ( '|' . join( l1) )
字符串的比较操作
运算符 : >, >=, <, <=, ==, != 比较规则 : 首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符串,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较 比较原理 : 两个字符进行比较时, 比较的是其ordinal value(原始值), 调用内置函数ord可以得到指定字符的ordinal value, 与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
print ( 'apple' > 'app' )
print ( 'apple' > 'banana' )
print ( ord ( 'a' ) , ord ( 'b' ) )
print ( chr ( 97 ) , chr ( 98 ) )
'''
== 与is的区别
== 比较的是value
is 比较的是id是否相等
'''
a = b = 'Python'
c = 'Python'
print ( a == b)
print ( b == c)
字符串的切片操作
s = 'hello,python'
s1 = s[ : 5 ]
s2 = s[ 6 : ]
s3 = s1 + '!' + s2
print ( s1)
print ( s2)
print ( s3)
print ( s[ 1 : 7 : 2 ] )
print ( s[ : : 2 ] )
格式化字符串
格式化字符串的两种方式
%作占位符
%s : 字符串 %i或%d : 整数 %f : 浮点数 {}作占位符
print ( '我的名字叫%s,我今年%d岁了!' % ( '张二蛋' , 18 ) )
print ( '我的名字叫{0},我今年{1}岁了!' . format ( '张二蛋' , 18 ) )
print ( '{0:.3}' . format ( 3.1415926 ) )
print ( '{0:.3f}' . format ( 3.1415926 ) )
字符串的编码与解码方式
编码 : 将字符串转换为二进制数据(bytes) 解码 : 将bytes类型的数据转换成字符串类型
s = '离离原上草'
print ( s. encode( encoding= 'GBK' ) )
print ( s. encode( encoding= 'UTF-8' ) )
byte = s. encode( encoding= 'GBK' )
print ( byte. decode( encoding= 'GBK' ) )