IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python字符串 -> 正文阅读

[Python知识库]Python字符串

字符串

1.字符串的驻留机制

  • 字符串

    ? 在Python中字符串是基本数据类型,是一个不可变的字符序列

  • 什么叫字符串驻留机制呢?

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

#字符串的驻留机制
a='hello'
b="hello"
c='''hello'''
print(a,id(a))
print(b,id(b))
print(c,id(c))

输出:

hello 2659185572144
hello 2659185572144
hello 2659185572144

id相同这说明对象a,b,c在内存当中只有一份

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

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

      在这里插入图片描述

      说明两个对象在内存当中时开了一个内存空间

    • 符合标识符的字符串

      ·当字符串符合标识符时,

      在这里插入图片描述

      这说明两个对象在内存中开了两个内存空间,内容虽相同,却用两个空间存储

      ·当字符串属于标识符时,

      在这里插入图片描述

      这时候就产生了驻留,内存地址相同

    • 字符串旨在编译时进行主流,而非运行时

      在这里插入图片描述

      为什么没有产生驻留呢?

      因为b的值是在运行之前就已经连接完毕,而c中的这个join操作是在运行时,在程序运行时会开新的内存空间。

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

      在这里插入图片描述

      因为-6不在[-5,256]范围内,所以不产生驻留

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

在这里插入图片描述

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

在这里插入图片描述

2.字符串的常用操作

a.查询操作

(1)index()

查找字符串substr第一次出现的位置(索引),如果查找的字符串不存在时,则会抛出Value Error

s='hello,hello'
print(s.index('o'))

输出:4

(2)rindex()

查找字符串substr最后一次出现的位置,如果查找的字符串不存在时,会抛出Value Error

s='hello,hello'
print(s.rindex('o'))

输出:10

(3)find()

查找字符串substr第一次出现的位置,如果查找的字符串不存在时,则返回-1

s='hello,hello'
print(s.find('o'))

输出:4

(4)rfind()

查找字符串substr最后一次出现的位置,如果查找的字符串不存在时,则返回-1

s='hello,hello'
print(s.refind('o'))

输出:10

b.大小写转换操作

(1)upper()

  • 把字符串中的所有字符都转成大写字符
s='hello,hello'  #转成大写之后,会产生一个新的字符串对象
a=s.upper()
print(a)

输出:HELLO,HELLO

(2)lower()

  • 把字符串中的所有字符都转成小写字母
s='HELLO,HELLO'
a=s.lower()  #同样也会产生一个新的字符串对象
print(a)

输出:hello,hello

(3)swapcase()

  • 把字符串中所有大写字母转为小写字母,把所有小写字母都转成大写字母
s='Hello,Hello'
a=s.swapcase()
print(a)

输出:hELLO,hELLO

(4)capitalize()

  • 把第一个字符转成大写,把其余字符转换成小写
s='heLLO,Hello'
a=s.capitalize()
print(a)

输出:Hello,hello

(5)title()

  • 把每个单词的第一个字符转换成大写,把每个单词的剩余字符转换成小写
s='heLLO,Hello'
a=s.title()
print(a)

输出:Hello,Hello

c.内容对齐操作

(1).center()

  • 居中对齐,第1个参数指定参数,第二个参数指定填充符,第2个参数是可选的,默认值是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.center(20,'%'))

输出:%%%%%hello,baby%%%%%

(2).ljust()

  • 左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.ljust(20,'%'))

输出:hello,baby%%%%%%%%%%

(3).rjust()

  • 右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.rjust(20,'%'))

输出:%%%%%%%%%%hello,baby

(4).zfill()

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

输出:0000000000hello,baby

d.劈分操作

(1)split()

  • 从字符串 的左边开始劈分,默认的劈分字符时空格字符串,返回的值都是一个列表

    a='hello,world'
    lst=a.split()
    print(lst)
    

    输出:[‘hello,world’]

  • 以通过参数sep指定劈分字符串时的劈分符

    a='hello world'
    lst=a.split(sep='|')
    print(lst)
    

    输出:[‘hello world’]

  • 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的字串会单独做成一部分

    a='hello|world|ok'
    lst=a.split(sep='|',maxsplit=1)
    print(lst)
    

    输出:[‘hello’, ‘world| ok’]

(2)rsplit()

  • 从字符串的右边开始劈分,默认的劈分字符时空格字符串,返回的值都是一个列表

    a='hello world ok'
    print(a.rsplit())
    

    输出:[‘hello’, ‘world’, ‘ok’]

  • 以通过参数sep指定劈分字符串时的劈分符

  • 通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字串会单独做为一部分

    a='hello|world|ok'
    print(a.rsplit(sep='|',maxsplit=1))
    

    输出:[‘hello|world’, ‘ok’]

e.判断字符串操作

(1).isidentifier()

  • 判断指定的字符串是不是合法的标识符

    s='hello,world'
    print(s.isidentifier())
    

    输出:False

    合法的标识符是数字,字母和下划线.不包括逗号

(2).isspace()

  • 判断指定的字符串是否全部由空白字符组成(回车,换行,水平制 表符)

    print('\t'.isspace())
    

    输出:True

(3).isalpha()

  • 判断指定的字符串是否全由字母组成

    s='hello,1'
    s2='张三'
    print(s.isalpha())
    print(s2.isalpha())
    

    输出:False

    True

(4).isdecimal()

  • 判断指定字符串是否全部由十进制的数字组成

    s='123,四'
    s2='123'
    print(s.isdecimal())
    print(s2.isdecimal())
    

    输出:False

    True

(5).isnumeric()

  • 判断指定的字符串是否全部由数字组成

    s='1234.'
    s2='1589四'
    print(s.isnumeric())
    print(s2.isnumeric())
    

    输出:False

    True

(6).isalnum()

  • 判断指定字符是否全部由字母和数字组成

    s='hello12138'
    print(s.isalnum())
    

    输出:True

f.字符串的替换与合并

(1).replace()

  • 第1个参数指定被替换的子串,第2 个参数指定替换字串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化.调用该方法时可以通过第3个参数指定最大替换次数

    s='hello,girl'
    print(s.replace('girl','boy'))
    

    输出:hello,boy

    s='hello,hello,hello,world'
    print(s.replace('hello','ok',3))  #3表示最大替换次数
    

    输出:ok,ok,ok,world

(2).join()

  • 将列表或元组中的字符串合并成一个字符串

    lst=['hello','flower','hi']
    print('@'.join(lst))
    

    输出:hello@flower@hi

    a='hello'
    print('@'.join(a))
    

    输出:h@e@l@l@o

3.字符串的比较

在这里插入图片描述

(图片转载网络)

print('apple'>'app')
print('apple'>'banana')

输出:True

False

怎么知道哪个字符更大呢?

我们可以比较它们的原始值

print(ord('a'),ord('b'))

输出: 97 98

4.字符串的切片操作

  • 字符串不具备增,删,改等操作
  • 切片操作将产生新的对象
s='hello,world'
s1=s[:5]  #没有指定起始位置,默认从0 开始,默认步长为1
s2=s[6:]   #没有指定结束位置,默认到末尾
s3='!'
new_str=s1+s3+s2
print(new_str)

输出:hello!world

5.格式化字符串

为什么需要格式化字符串?

在python中我们会遇到一个问题,问题是如何输出格式化的字符串。我们经常会输出类似’亲爱的xxx你好!您尾号xxxx卡快捷支付xx元,余额xxxx元’之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。

在python中,我们用%或{}实现格式化字符串。

在这里插入图片描述

(图片转载网络)

#第一种方式  %
name='张三'
age=20
print('我叫%s,今年%d岁'%(name,age))

输出:我叫张三,今年20岁

# 第二种方式 {}
name='张三'
age=20
print('我叫{0},今年{1}岁'.format(name,age))

输出:我叫张三,今年20岁

当然还有第三种方式

#第三种方式  f-string
name='张三'
age=20
print(f'我叫{name},今年{age}岁')

输出:我叫张三,今年20岁

我们还可以用格式化字符来表示宽度

print('%10d' % 100)  #10表示宽度为10
print('helloworld')

输出:在这里插入图片描述

同时可以表示精度

print('%.3f' %  3.1415926)  #3表示保留三位,同时四舍五入

输出:3.142

也可以同时表宽度和精度

print('%10.3f' % 3.1415926)

输出:

? 3.142

6.字符串的编码转换

为什么需要字符串的变成转换?

在这里插入图片描述

(图片转载网络)

  • 编码与解码的方式
    • 编码:将字符串转换为二进制数据(bytes)
    • 解码:将bytes类型的数据转换成字符串类型
s='一二三四五'
print(s.encode(encoding='GBK'))  #在GBK这种编码格中,一个中文占两个字节

输出:

b’\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\xce\xe5’

其中‘b’表示的是二进制

s='一二三四五'
print(s.encode(encoding='UTF-8'))
 #在UTF-8这种编码格中,一个中文占三个字节 

输出:

b’\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89\xe5\x9b\x9b\xe4\xba\x94’

那我们怎么进行解码呢?

#解码
s='一二三四五'
byte=s.encode(encoding='GBK')  #编码
print(byte.decode(encoding='GBK'))  #解码

输出:一二三四五

注意:编码格式要与解码格式相同

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:53:29  更:2022-09-24 20:56:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 14:37:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码