热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

字符串~啦啦啦

字符串字符串的驻留机制在Python中字符串是基本数据类型,是一个不可变的字符序列仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留

字符串


字符串的驻留机制

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

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


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


  • 字符串的长度为0或1时
  • 符合标识符的字符串---->数字、字母、下划线组成的字符串
  • 字符串只在编译时进行驻留,而非运行时
  • [-5,256]之间的整数数字


符合标识符的字符串:

s1 = 'a_'
s2 = 'a_'
print(s1 == s2) #True
print(s1 is s2) #True
print(id(s1)) #2917529052080
print(id(s2)) #2917529052080

不符合标识符的字符串:

s1 = 'abc%'
s2 = 'abc%'
print(s1 == s2) #True
print(s1 is s2) #False
print(id(s1)) #2917528987056
print(id(s2)) #2917528987376


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

s1 = 'abc'
s2 = 'a'+'bc'
s3 = ''.join(['a','bc'])print(s1 == s2) #True
print(s1 == s3) #Trueprint(s1 is s2) #True
print(s1 is s3) #Falseprint(type(s1)) #
print(type(s2)) #
print(type(s3)) #print(id(s1)) #2917494471664
print(id(s2)) #2917494471664
print(id(s3)) #2917528925424



驻留机制的优缺点


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

字符串的常用操作


字符串的查询操作

1、index()


查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError


2、rindex()


查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError


3、find()


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


4、rfind()


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





字符串的大小写

1、upper()


把字符串中所有字符都转成大写字母


2、lower()


把字符串中所有字符都转成小写字母


3、swapcase()


把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母


4、capitalize()


把第一个字符转换为大写,把其余字符转换为小写


5、title()


把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写





字符串内容对齐的操作

1、center()


居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串


2、ljust()


左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串


3、rjust()


右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串


4、zfill()


右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
如果是负数,在负号后面填0





字符串的分割

split()


  • 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值是一个列表
  • 以通过参数sep指定劈分字符串是的劈分符
  • 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分

rsplit()


  • 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
  • 以通过参数sep指定劈分字符串是的劈分符
  • 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分



字符串的替换

replace()

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




字符串的合并

join()

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

list = ['aa','bb','cc']
print("*".join(list)) #aa*bb*cc

字符串中的每一个字符间加入合并符,合成一个新的字符串

str= 'abc'
print("*".join(str)) #a*b*c
str = 'a bc'
print("*".join(str)) #a* *b*c

字符串的比较

运算符&#xff1a;>,<,>&#61;,<&#61;,&#61;&#61;,!&#61;

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

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

ord(&#39;a&#39;)
#97
ord(&#39;b&#39;)
#98chr(97)
#&#39;a&#39;

字符串的切片

切片 [start&#61;0:end&#61;str.len():step&#61;1]

注意&#xff1a;如果step<0

str&#61;&#39;apple&#39;
str1 &#61; str[::-1]
print(str1)#elppa
print(str[::-2])
#epa

如果start或者end为负数

str&#61;&#39;apple&#39;
print(str[-3::])
#ple

格式化字符串


格式化字符串的两种方式

1、%作占位符

例如&#xff1a;

&#39;你好&#xff0c;我的名字是:%s,今年:%d岁了&#39;%(name,age)
小括号中是实际值

2、{}作占位符

例如&#xff1a;

&#39;你好&#xff0c;我的名字是:{0},今年:{1}岁了&#39;.format(name,age)
小括号中是实际值

3、f

例如&#xff1a;

f&#39;你好&#xff0c;我的名字是:{name},今年:{age}岁了&#39;


整数 &#39;%<宽度>d&#39;%实际值 浮点数 &#39;%<宽度>.<小数点后n位>f&#39;%实际值&#39;{占位:.<表示几位数>}&#39;.format(实际值)&#39;{占位:.<小数点后n位>f}&#39;.format(实际值)#占位可以不写

字符串的编码与解码

编码&#xff1a;将字符串转换为二进制数据
解码&#xff1a;将bytes类型的数据转化为字符串类型


编码

str &#61; &#39;你好&#xff0c;中国&#39;
print(str.encode(encoding&#61;&#39;GBK&#39;)) #b&#39;\xc4\xe3\xba\xc3\xa3\xac\xd6\xd0\xb9\xfa&#39;
print(str.encode(encoding&#61;&#39;UTF-8&#39;)) #b&#39;\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\xad\xe5\x9b\xbd&#39;

解码

str &#61; &#39;你好&#xff0c;中国&#39;
a &#61; str.encode(encoding&#61;&#39;GBK&#39;)
print(a.decode(encoding&#61;&#39;GBK&#39;)) #你好&#xff0c;中国
b &#61; str.encode(encoding&#61;&#39;UTF-8&#39;)
print(b.decode(encoding&#61;&#39;UTF-8&#39;)) #你好&#xff0c;中国

推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
author-avatar
梦幻死灵_791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有