Python对字符串的基础操作,字符串的查询,大小写转化,字符串内容对齐,劈分字符串,字符串比较,字符串切片,格式化字符串,字符串的编码转换

本文探讨了Python中的字符串驻留机制,包括不同情况下的字符串比较、sys的intern方法、PyCharm的优化,以及字符串的常见操作如查询、转换、对齐、劈分、判断和格式化。还涵盖了字符串的比较、切片、编码转化等知识点。
摘要由CSDN通过智能技术生成

目录

1.字符串的驻留机制

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

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

1.3  PyCharm对字符串进行了优化处理

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

2.字符串的常用操作

2.1  字符串的查询操作

2.2  字符串的大小写转化操作

2.3  字符串内容对齐操作的方法

2.4  字符串劈分操作

2.5  判断字符串操作

2.6  字符串操作的其他方法

3.字符串的比较

4.字符串的切片操作

5.格式化字符串

6.字符串的编码转化


1.字符串的驻留机制

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

  • 字符串的长度为1或0时
  • 符合标识符的字符串
  • 字符串只在编译是进行驻留,而非运行时
  • [-5,256]直接的整数数字

运行代码:在交互模式下 

>>> s1=''
>>> s2=''
>>> s1 is s2
True
>>> s1='%'
>>> s2='%'
>>> s1 is s2
True
>>> s1='abc%'
>>> s2='abc%'
>>> s1==s2
True
>>> s1 is s2
False
>>> id(s1)
2427592439920
>>> id(s2)
2427592440496
>>> s1='abcx'
>>> s2='abcx'
>>> s1 is s2
True
>>> a='abc'
>>> b='a'+'bc'
>>> c=''.join(['ab','c'])
>>> a is b
True
>>> a is c
False
>>> c
'abc'
>>> type(c)
<class 'str'>
>>> type(a)
<class 'str'>
>>> a=-5
>>> b=-5
>>> a is b
True
>>> a=-6
>>> b=-6
>>> a is b

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

运行代码:在交互模式下

>>> import sys
>>> a='abc%'
>>> b='abc%'
>>> a is b
False
>>> a=sys.intern(b)
>>> a is b
True
>>>

1.3  PyCharm对字符串进行了优化处理

运行结果:在PyCharm中 

s1='abc%'
s2='abc%'
print(s1 is s2)#True

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

  • 当需要值相同的字符串是,可以直接从字符串池中拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是比较影响性能的
  • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所以字符的长度,然后拷贝,只new一次对象,效率要比“+”效率高 

2.字符串的常用操作

2.1  字符串的查询操作

功能方法名称作用
查询方法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

2.2  字符串的大小写转化操作

功能方法名称作用
大小写转化upper()把字符串中所有字符转成大写字母
lower()把字符串中所有字符转成小写字母
swapcase()把字符串中所有大写字母转成小写字母,小写字母转成大写字母
capitalize()把第一个字符转为大写,把其余字符转为小写
title()把每个单词的第一个字符转为大写,每个单词剩余字符转为小写

代码演示:

s='hello,python'

'''upper(),会产生一个新的字符串对象'''
a=s.upper()
print(a,id(a))#HELLO,PYTHON 2544300046064
print(s,id(s))#hello,Python 2544300356272

'''lower(),会产生一个新的字符串对象'''
s1='hello,PYTHON'
b=s1.lower()
print(b,id(b))#hello,python 2544300095856
print(s1,id(s1))#hello,Python 2544300356272

s2='hello,PYTHON'
print(s2.swapcase())#HELLO,python

print(s2.capitalize())#Hello,python

print(s2.title())#Hello,Python

2.3  字符串内容对齐操作的方法

功能方法名称作用
字符串对齐center()居中对齐,第一个参数指定宽度,第二个参数指定填充符,默认是空格,设置宽度小于实际宽度,返回原字符串
ljust()左对齐,第一个参数指定宽度,第二个参数指定填充符,默认是空格,设置宽度小于实际宽度,返回原字符串
rjust()右对齐,第一个参数指定宽度,第二个参数指定填充符,默认是空格,设置宽度小于实际宽度,返回原字符串
zfill()右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果宽度小于实际宽度,返回原字符串

代码演示:

s='hello,python'

'''居中对齐'''
print(s.center(20,'*'))#****hello,python****

'''左对齐'''
print(s.ljust(20,'*'))#hello,python********

'''右对齐'''
print(s.rjust(20,'*'))#********hello,python
print(s.rjust(20))#        hello,python
print(s.rjust(5))#hello,python

'''右对齐,使用0进行填充'''
print(s.zfill(20))#00000000hello,python
print('123456'.zfill(20))#00000000000000123456
print('-123456'.zfill(20))#-0000000000000123456

2.4  字符串劈分操作

功能方法名称作用
字符串劈分split()从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
以通过参数sep指定劈分字符串的劈分符
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分次数之后,剩余的子串会单独作为一部分
rsplit()从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
以通过参数sep指定劈分字符串的劈分符
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分次数之后,剩余的子串会单独作为一部分

代码演示:

s='hello world python'

'''从左边开始劈分'''
lst=s.split()
print(lst)#['hello', 'world', 'python']

s1='hello-world-python'
lst=s1.split(sep='-')
print(lst)#['hello', 'world', 'python']

s1='hello-world-python'
lst=s1.split(sep='-',maxsplit=1)
print(lst)#['hello', 'world-python']

'''从右边开始劈分'''
s1='hello-world-python'
lst=s1.rsplit(sep='-',maxsplit=1)
print(lst)#['hello-world', 'python']

2.5  判断字符串操作

功能方法名称作用
判断字符串isidentifier()判断指定的字符串是不是合法的标识符
isspace()判断指定的字符串是否全部由空白字符组成(回车,换行,水平制表符)
isalpha()判断指定的字符串是否全部由字母组成
isdecimal()判断指定的字符串是否全部由十进制的数字组成
isnumeric()判断指定的字符串是否全部由数字组成
isalnum()判断指定的字符串是否全部由字母和数字组成

注:合法标识符由字母,数字,下划线组成

代码演示:

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

2.6  字符串操作的其他方法

功能方法名称作用
字符串替换replace()第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不会发生变化,调用该方法时可以通过第三个参数指定最大替换次数
字符串的合并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
'''  '*'.join(lst)    表示用*粘连列表lst中的字符串'''

3.字符串的比较

print('apple'>'app')#True
print('apple'>'banana')
print(ord('a'),ord('b'))
print(ord('刘'))

print(chr(97),chr(98))
print(chr(21016))

4.字符串的切片操作

  • 字符串是不可变类型
  • 不具备增,删,改操作
  • 切片操作将产生新对象
s='hello,Python'
s1=s[:5]
s2=s[6:]
s3='!'
newstr=s1+s2+s3

print(s1)#hello
print(s2)#Python
print(newstr)#helloPython!

print(s[1:5:1])#ello
print(s[::-1])#nohtyP,olleh

5.格式化字符串

三种方式:

(1)% 占位符

(2){}

(3)f-string 

#(1)  %  占位符
name='张三'
age=20
print('我叫%s,今年%d岁' % (name,age))#我叫张三,今年20岁

#(2) {}
print('我叫{0},今年{1}岁'.format(name,age))#我叫张三,今年20岁

#(3) f-strint
print(f'我叫{name},今年{age}岁')#我叫张三,今年20岁

#(1)
print('%d' % 99)
print('%10d' % 99)#10表示宽度
print('%f' % 3.1415926)#3.141593
print('%.3f' % 3.1415926)#3.142  注:.3表示小数点后三位
#同时表示宽度和精度
print('%10.3f' % 3.1415926)#     3.142  注:总宽度10,小数点后3位

#(2)
print('{0:0.3}'.format(3.1415926))#3.14  注:.3表示的是一共3位数
print('{:.3f}'.format(3.1415926))#3.142  注:.3f表示2位小数
print('{:10.3f}'.format(3.1415926))#     3.142  注:同时设置精度和宽度,总宽度10,小数点后3位


6.字符串的编码转化

编码与解码的方式:

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

解码:将(bytes)类型的数据转化成字符串类型

s='天涯共此时'
#编码
print(s.encode(encoding='GBK'))#GBK编码格式中,一个中文占俩字节
#b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'

print(s.encode(encoding='UTF-8'))#UTF-8编码格式中,一个中文占三个字节
#b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'

#解码
byte1=s.encode(encoding='GBK')
byte2=s.encode(encoding='UTF-8')
print(byte1.decode(encoding='GBK'))#天涯共此时
print(byte2.decode(encoding='UTF-8'))#天涯共此时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值