python的字符串操作

news2024/12/22 23:03:51

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'
江海寄余生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想知道MLGO是如何工作的吗?看完这篇文章你就懂了

在当今软件开发领域&#xff0c;代码优化对于提高性能和减小代码体积至关重要。在这方面&#xff0c;内联&#xff08;Inlining&#xff09;被认为是一项关键的优化技术之一。而MLGO能够在编译过程中智能地做出内联/非内联的决策&#xff0c;从而提供更高效、更紧凑的代码。本文…

apk应用完整性校验

测试客户端程序是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端 程序中植入自己的木马&#xff0c;客户端程序如果没有自校验机制的话&#xff0c;攻击者可能会通过篡改客 户端程序窃取手机用户的隐私信息。 用 ApkTool 将目标 APK 文件解包&#xff0c;命令如…

linux下实现串口功能

1.先从wiringpi库复制一个串口代码 2.查看串口类型 3.将代码修改成ttyS5 4.改完代码后打开串口助手然后编译 代码示例&#xff1a; #include <stdio.h> #include <string.h> #include <errno.h> #include <pthread.h> #include <wiringPi.h> #i…

Ubuntu18.04.6本地部署PaddleSpeech实验代码(CPU版)

前言 因为本人不是搞python和AI的&#xff0c;所以部署这个项目是耗时耗力&#xff0c;本地部署还是挺麻烦的&#xff0c;发现了很多问题&#xff0c;关键就是权限和源代码路径问题&#xff0c;经历了14天&#xff08;大部分时间扔在做系统&#xff0c;装环境&#xff0c;代码阅…

【数学建模】常微分方程

常微分方程 博客园解释 https://www.cnblogs.com/docnan/p/8126460.html https://www.cnblogs.com/hanxi/archive/2011/12/02/2272597.html https://www.cnblogs.com/b0ttle/p/ODEaid.html matlab求解常微分方程 https://www.cnblogs.com/xxfx/p/12460628.html https://www.cn…

使用FreeMarker生成word文件自定义每页页眉或页脚

最新工作中遇到生成word中表格时&#xff0c;要求文档中每页头部和底部都是固定格式的表格&#xff0c;但是内容不一样&#xff0c;头部信息在word中画样式的时候就可以设置为“在各页顶端以标题形式重复出现”&#xff0c;而底部就没有办法这样设置了&#xff0c;之后就想着在…

【GPT模型】遥感云大数据在灾害、水体与湿地领域中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

TypeScript 中【class类】与 【 接口 Interfaces】的联合使用解读

导读&#xff1a; 前面章节&#xff0c;我们讲到过 接口&#xff08;Interface&#xff09;可以用于对「对象的形状&#xff08;Shape&#xff09;」进行描述。 本章节主要介绍接口的另一个用途&#xff0c;对类的一部分行为进行抽象。 类配合实现接口 实现&#xff08;impleme…

为什么Mate X3手机屏幕有水也不影响操作?

我知道现在的手机大多都防水&#xff0c;但没想到连折叠屏手机Mate X3在湿水状态下都丝毫不影响操作&#xff0c;现在的华为手机防水都做到这种程度了&#xff1f; 众所周知&#xff0c;如果手机屏幕上有水珠&#xff0c;那么手机的触屏就会变得飘忽不定。 这种“飘忽不定”是…

局域网聊天软件都有哪些?几款常用的局域网聊天软件推荐

随着科技的不断发展&#xff0c;人们在日常生活和工作中越来越需要高效便捷的沟通工具。而局域网聊天软件就是一种在局域网内使用的聊天工具&#xff0c;它能够帮助用户在同一网络内的设备之间进行即时通讯&#xff0c;无需依赖于互联网连接&#xff0c;安全又可靠。下面将为大…

学无止境·MySQL⑥(数据库备份和还原)

数据库备份和还原 备份和还原练习1、创建库和表2、使用mysqldump命令备份数据库中的所有表3、备份booksDB数据库中的books表4、使用mysqldump备份booksDB和test数据库5、使用mysqldump备份服务器中的所有数据库6、使用mysql命令还原第二题导出的book表7、进入数据库使用source命…

“快速批量去除文件夹名称中多余重复文字!轻松实现文件夹改名优化,提升整理效率!“

在日常的电脑使用中&#xff0c;我们常常面临着大量的文件和文件夹需要整理&#xff0c;而其中一个常见的问题就是文件夹名称中存在重复的文字&#xff0c;让整个文件夹结构变得混乱而不易管理。为了解决这一问题&#xff0c;我们自豪地推出了全新的文件夹改名工具&#xff0c;…

华为配置LLDP基本功能

华为配置LLDP基本功能 1.什么是lldp协议 定义 LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将…

产品新升级!MODBUS/SNMP智能协议转换器

“MODBUS TCP”是一种基于 TCP协议的工业控制设备通信协议&#xff0c;其主要功能是实现现场设备的远程控制。MODBUS TCP采用远程通讯的方式&#xff0c;通过 IP网络进行数据传输&#xff0c;因此其传输速率更快、网络负载更小、灵活性更高。 “ SNMP”是一种用于网络管理的…

如何考过PMP? 备考经历分享

考PMP的目的 周围很多同事、朋友都在学习PMP课程或者已获得证书&#xff0c;在日常工作中发现有些词语已经听不懂&#xff0c;比如项目集、项目组合&#xff0c;比如PM等&#xff0c;为了提升自己也为了能在侃大山时也能参与其中脱离“一清二白”的状态&#xff0c;所以下定决…

0基础学习云计算难吗?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…

SpringBoot 异常处理机制

SpringBoot中异常处理的流程图 在SpringBoot项目中&#xff0c;如果业务逻辑发生了异常&#xff0c;则首先看发生异常的类中有没有ExceptionHandle能处理&#xff0c;如果能&#xff0c;则执行方法进行处理&#xff0c;如果没有&#xff0c;则去找全局的ControllerAdvice注解…

X2000 Linux 调试VL53L4CD驱动

由于VL53L4CD具有更高的精度&#xff0c;更低的功耗&#xff0c;所以尝试将VL53L4CD移植到X2000上进行测试。 一、下载驱动 en.VL53L4CD_LinuxDriver 二、SDK中加入驱动 1、加入源码 在\module_driver\devices下创建VL53L4CD文件夹&#xff0c;再将\en.VL53L4CD_LinuxDriver…

Cyclo(Ile-Leu),91741-17-2,环(异亮氨酸-亮氨酸)二肽,可以根据实验需求定制

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ Cyclo(Ile-Leu)&#xff0c;DL-isoleucyl-leucyl anhydride&#xff0c;环(异亮氨酸-亮氨酸)二肽&#xff0c;DL异亮氨酸酰酐 产品结构式&#xff1a; 产品规格&#xff1a;…

10.2.5 【Linux】变量的有效范围

在学理方面&#xff0c;为什么环境变量的数据可以被子程序所引用呢&#xff1f;这是因为内存配置的关系&#xff01;理论上是这样的&#xff1a; 当启动一个 shell&#xff0c;操作系统会分配一记忆区块给 shell 使用&#xff0c;此内存内之变量可让子程序取用 若在父程序利用…