python的字符串操作

1、字符串的驻留机制

  • 字符串
    ·在Python中字符串是基本数据类型,是一个不可变的字符序列
  • 什么叫字符串驻留机制呢?
    仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
    在这里插入图片描述
a = 'python'
b = "python"
c = '''python'''

print(a,id(a))
print(b,id(b))
print(c,id(c))

输出结果:

python 2957716513880
python 2957716513880
python 2957716513880

三个字符串的的内存地址是一样的。

  • 驻留机制的几种情况(交互模式)
    ·字符串的长度为0或1时
    ·符合标识符的字符串
    ·字符串只在编译时进行驻留,而非运行时
    ·[-5,256]之间的整数数字
    · sys中的intern方法强制2个字符串指向同一个对象.
    PyCharm对字符串进行了优化处理

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

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

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

2、字符串的常用操作·

  • 字符串的查询操作的方法
    在这里插入图片描述
s = 'hello,hello'
print(s.index('lo'))   #查找第一次出现的位置
print(s.find('lo'))    #查找第一次出现的位置
print(s.rindex('lo'))  #查找最后一次出现的位置
print(s.rfind('lo'))    #查找最后一次出现的位置

输出结果:

3
3
9
9
s = 'hello,hello'
print(s.index('k'))   #查询的子串不存在,抛异常

输出结果:

Traceback (most recent call last):
  File "F:/myfile/python/code/test.py", line 19, in <module>
    print(s.index('k'))
ValueError: substring not found
s = 'hello,hello'
print(s.find('k'))  #查找子串不存在就返回-1

输出结果:

-1
  • 字符串的大小写转换操作的方法
    在这里插入图片描述
s = 'hello,python'
a = s.upper()   #转换成大写之后,会产生一个新的字符串对象
print(a,id(a))
print(s, id(s))

b = s.lower()   #转换成小写之后,会产生一个新的字符串对象
print(b,id(b))
print(s,id(s))
print(b == s)   #判断内容是否相等, True
print(b is s)   #判断内存地址是否相等 ,False

输出结果:

HELLO,PYTHON 2458502897712
hello,python 2458502897840
hello,python 2458502897776
hello,python 2458502897840
True
False
  • 字符串内容对齐操作的方法
    在这里插入图片描述
s = 'python'
print(s.center(20,'*'))   #居中
print(s.ljust(20,'*'))   #左对齐
print(s.ljust(4))     #小于字符串长度,原样输出
print(s.ljust(20))   #不指定填充符,会用空格填充

print(s.rjust(20,'*'))  #右对齐
print(s.zfill(20))     #右对齐用0填充

输出结果:

*******python*******
python**************
python
python              
**************python
00000000000000python
  • 字符串劈分操作的方法
    在这里插入图片描述
s = 'hello world python'
lst = s.split()   #默认分隔符是空格,分割后产生一个list
print(lst)

s = "logs;good;script"
lst = s.split(sep=';')
print(lst)

输出结果:

['hello', 'world', 'python']
['logs', 'good', 'script']
  • 判断字符串操作的方法
    在这里插入图片描述
  • 字符串的其他操作方法
    在这里插入图片描述
s = "hello,python"
print(s.replace('python','php'))
s1 = 'hello python python python'
print(s1.replace('python','php',2))

lst = ['mysql','oracle','serversql']
print('|'.join(lst))
print(''.join(lst))

输出结果:

hello,php
hello php php python
mysql|oracle|serversql
mysqloracleserversql

3、字符串的比较

  • 运算符:> ,>=, <, <=. ==, !=
  • 比较规则:首先比较两个字符串中的第一 个字符,如果相等则继续比较下-一个字
    符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个
    字符串的比较结果,两个字符串中的所有后续字符将不再被比较
  • 比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函.
    数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,
    调用内置函数chr时指定ordinal value’可以得到其对应的字符
s1 = 'apple'
s2 = 'app'
print(s1 > s2)
s1 = 'apple'
s2 = 'bana'
print(s1 > s2)
print(ord('a'),ord('b'))

输出结果:

True
False
97 98

4、字符串的切片操作·

切片操作都会返回一个新的列表

#模式[start:end:step]
"""
其中,第一个数字start表示切片开始位置,默认为0 ;
第二个数字end表示切片截止(但不包含)位置(默认为列表长度);
第三个数字step表示切片的步长(默认为1)。
当start为0时可以省略,当end为列表长度时可以省略,
当step为1时可以省略,并且省略步长时可以同时省略最后一个冒号。
另外,当step为负整数时,表示反向切片,这时start应该比end的值要大才行。
"""

aList = [3,4,5,6,7,9,11,13,15,17]
aList[::]   #返回包含原列表中所有元素的新列表
aList[::-1]    #返回包含原列表中所有元素的逆序列表
print(aList[ ::2])    #隔一个取一个,获取偶数位置的元素
print(aList[1::2])    #隔一个取一个,获取奇数位置的元素
print(aList[3:6])     #指定切片的开始和结束位置
aList[0:100]        #切片结束位置大于列表长度时,从列表尾部截断
aList[100:]        #切片开始位置大于列表长度时,返回空列表
alist[len(aList):] = [9]        #在列表尾部增加元素
aList[:0] = [1,2]              #在列表头部插入元素
alist[3:3] = [4]       #在列表中间位置插入元素
aList[:3] = [1,2]      #替换列表元素,等号两边的列表长度相等
aList[3:] = [4,5,6]    #等号两边的列表长度也可以不相等

5、格式化字符串

在这里插入图片描述

name = 'mary'
age = 18
print('我叫%s,今年%d岁' % (name,age))

print('我叫{0},今年{1}岁'.format(name,age))

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

输出结果:

我叫mary,今年18岁
我叫mary,今年18岁
我叫mary,今年18

6、字符串的编码转换

在这里插入图片描述

s = "江海寄余生"
print(s.encode("gbk"))

byte = s.encode("gbk")   #编码
print(byte.decode("gbk"))  #解码

输出结果:

b'\xbd\xad\xba\xa3\xbc\xc4\xd3\xe0\xc9\xfa'
江海寄余生
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javascript_good

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值