python中的字符串

目录

1字符串的驻留机制

2字符串的常用操作

1字符串的查询操作的方法: 

 2字符串的大小写转换操作方法

 3字符串内容对齐操作:

4字符串劈分操作的方法

 5判断字符串操作的方法

 6字符串操作的其它方法

3字符串的比较

4字符串的切片操作

5格式化字符串

        1.以%作为占位符

        2.{}作为占位符

        3.f -string

         4.宽度和精度

6字符串的编码转换


1字符串的驻留机制

        字符串同元组一样,是一个不可变的字符序列。可用''," ",''' ''',来创建。

        字符串的驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

        驻留机制的几种情况(交互模式)

        1.字符串的长度为0或1时

        2.符合标识符的字符串

        3.字符串只在编译时进行驻留,而非运行时

        4.[-5,256]之间的整数数字

        sys中的intern方法强制2个字符串指向同一个对象

        pycharm对字符串进行了优化处理

        字符串驻留机制的优缺点:

        当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能。

        当需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比“+”效率高。

2字符串的常用操作

1字符串的查询操作的方法: 

a = "hello, hello"
print(a.index('lo'))  # 3   ## 查找字符串第一次出现的位置,查找的字符串不存在会报错
print(a.find('lo'))  # 3    ## 查找字符串第一次出现的位置,查找的字符串不存在会报-1
print(a.rindex('lo'))  # 10 ## 查找字符串最后一次出现的位置,查找的字符串不存在会报错
print(a.rfind('lo'))  # 10 ## 查找字符串最后一次出现的位置,查找的字符串不存在会报-1
# print(a.index('k'))  # ValueError: substring not found
print(a.find('k'))  # -1

 2字符串的大小写转换操作方法

"-----字符串中的大小写转换的方法------"
s = "Hello worlD!,this is python."
print(s.upper())   # 全部转成大写的字符串
print(s.lower())   # 转完之后虽然值是一样的,但是和原来的id是不一样的,说明字符串是不可变序列,转完之后产生了新的序列
print(s.swapcase())  # 把字符串中所有的大写转为小写,小写转为大写
print(s.capitalize())  # 把字符串的第一个字符大写,其余均为小写
print(s.title())    # 把字符串中的每个单词的首字母大写,其余的字符为小写

 3字符串内容对齐操作:

"-----字符串内容对齐操作------"
s = 'hello,world!'
# center() 居中对齐,第一个参数指定宽度,第二个参数指定填充字符,默认为空格
print(s.center(20, "#"))  # 给定20的长度,字符串一共12个,然后左右各填充4个#
# ####hello,world!####

#  ljust() 左对齐,第一个参数指定宽度,第二个参数指定填充字符,默认为空格
print(s.ljust(20, "*"))  # 给定20的宽度,字符串左对齐,其余的填充*,如果设的宽度小于原字符,就返回返回原字符
# hello,world!********

#  rjust() 右对齐,第一个参数指定宽度,第二个参数指定填充符
print(s.rjust(20, "!"))
# !!!!!!!!hello,world!

# zfill() 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
print(s.zfill(20))
# 00000000hello,world!

4字符串劈分操作的方法

"-----字符串内容劈分操作------"
s1 = 'hello,world! this is python!'
print(s1.split())  # 默认空格分割 ,也就是按空格分开
# ['hello,world!', 'this', 'is', 'python!']

s2 = 'hello world! |this |is |python!'
print(s2.split(sep="|"))  # 以|分割
# ['hello world! ', 'this ', 'is ', 'python!']

print(s2.split(sep='|', maxsplit=1))  # maxsplit为最大劈分次数,也就是分几次,其余的就不分了
# ['hello world! ', 'this |is |python!']

print(s1.rsplit())  # rsplit()就是从右侧开始劈分,默认为空格
# ['hello,world!', 'this', 'is', 'python!']
print(s2.rsplit(sep="|",maxsplit=1))
# ['hello world! |this |is ', 'python!']

 5判断字符串操作的方法

"-----判断字符串操作的方法------"
s1 = "hello world!, this is python!"
#  isidentifier()      判断字符串是否是合法的标识符
print(s1.isidentifier())  # False  ## 合法的字符串(数字,下划线,字母),这里有逗号。
print("hello".isidentifier())  # True
print('张三_123'.isidentifier())  # True

# isspace()    判断指定的字符串是否全部由空白字符(回车,水平制表符,换行)组成
print("\t".isspace())  # True

# isalpha()   判断指定的字符串是否由全部由字母组成
print('abc'.isalpha())  # True
print('李潇'.isalpha())  # True
print('abc1'.isalpha())  # False

# isdecimal()  判断指定字符串是否由是十进制的数字组成
print('123'.isdecimal())  # True
print('123四'.isdecimal())  # False

# isnumeric()  判断指定的字符串是否全部由数字组成
print('123'.isnumeric())  # True
print('123四'.isnumeric())  # True

# isalnum() 判断字符串是否全部由字母和数字组成
print('123abc'.isalnum())  # True
print('123abc!'.isalnum())  # False

 6字符串操作的其它方法

"--------字符串的替换------"
# replace() 第一个参数指定被替换的字串,第二个参数为要替换的字符串,第三个参数指定最大替换次数
s1 = "hello,python,python,python"
print(s1.replace("python", "java", 2))

# join()  将列表或元组中的字符串合并成一个字符串
lst = ['hello', 'python', 'java']
print('|'.join(lst))  # hello|python|java
print(''.join(lst))  # hellopythonjava
t = ('h', 'e', 'l', 'l', 'o')
print("".join(t))  # hello



print('*'.join('python'))  # p*y*t*h*o*n

3字符串的比较

运算符:>,<,<=,>=,==,!=

比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,则比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较。

比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord(),k可以得到指定字符的ordinal value。与内置函数ord()对应的是内置函数chr,调用内置函数chr时,指定ordinal value可以得到其对应的字符。

"--------字符串的比较------"
print('apple' > 'app')  # True
print('apple' > 'banana')  # False
# 这里比较的是原始值,从第一个字母开始
print(ord('a'))  # 97
print(ord('b'))  # 98
print(chr(97))  # a
print(ord('李'))  # 26446
print(chr(26446))  # 李

4字符串的切片操作

        字符串是不可变类型,不具备增删改操作。

        切片操作之后会产生新的对象

        字符串切片同列表切片一样。

5格式化字符串

        1.以%作为占位符

                %s表示字符串,%i或者%d表示整数,%f表示浮点数

 

#  1.以%做为占位符
name = '张三'
age = 20
print('我是%s,今年%d岁了' % (name, age))

        2.{}作为占位符

"--------格式化字符串------"
name = '张三'
age = 20
#   2.以{}做为占位符
print('我是{0},我今年{1}岁了,我真的叫{0}'.format(name, age))

        3.f -string

                              print(f'我叫{name},今年{age}岁了')

"--------格式化字符串------"
#  1.以%做为占位符
name = '张三'
age = 20
#  3.f-string
print(f"我叫{name},今年{age}岁了")

         4.宽度和精度


print("%10d" % 99)  # 这里的10表示宽度
print('%.4f' % 3.1415926535)  # 3.1416       .4表示保留4位小数
print('%10.3f' % 3.1415926)   # #     3.142     还可以同时指定宽度和精度
print("{0:.3}".format(3.1415926))  # 3.14        这里的.3表示一共是3位,这里的0是索引
print("{0:.3f}".format(3.1415926))  # 3.142      这里的.3表示3位小数
print("{0:10.3f}".format(3.1415926))  #      3.142   同时指定宽度和精度

6字符串的编码转换

 字符串转成二进制数据,再从二进制转成字符串

编码与解码的方式:

        编码:将字符串转为2进制数据(bytes)

                                字符串.encode(encoding='编码格式')

        解码:将bytes类型的数据转为字符串类型

                                字符串.decode(encoding='编码格式')

"--------字符串编码------"
##### 编码,将字符串转为2进制
s = "书山有路勤为径"
print(s.encode(encoding='UTF-8'))  # 在utf-8中一个中文占3个字节
print(s.encode(encoding='GBK'))  # 在GBK中一个中文占2个字节
##### 解码
##   print(二进制数.decode(encoding='编码表'))
print(b'\xca\xe9\xc9\xbd\xd3\xd0\xc2\xb7\xc7\xda\xce\xaa\xbe\xb6'.decode(encoding='GBK'))
# 书山有路勤为径
print(b'\xe4\xb9\xa6\xe5\xb1\xb1\xe6\x9c\x89\xe8\xb7\xaf\xe5\x8b\xa4\xe4\xb8\xba\xe5\xbe\x84'.decode(encoding="UTF-8"))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值