点击蓝色“潭时录”关注我丫

加个“星标”,每天和小潭一起快乐的学习

你好,我是在学python的小潭。通过前两天的文章12-python中的集合我们学习了有关集合的知识,今天我们将学习一下python中的字符串。

(一)字符串的介绍

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

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

驻留机制分为以下几种情况(需要在交互模式下验证)

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

  • 符合标识符的字符串

  • 字符串只在编译时进行驻留,并不是在运行时

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

sys函数中的intern方法会强制两个字符串指向同一个对象,而pycharm工具会对字符串进行优化处理。

驻留机制的优缺点

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

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

代码示例1:

# 驻留机制a = 'python'b = "python"c = '''python'''print(a, id(a))print(b, id(b))print(c, id(c))

结果输出:

python 34229696python 34229696python 34229696

代码示例2:

print('----驻留机制分类----')# 字符串的长度为0或1时s1 = ''s2 = ''print('s1是s2吗?', s1 is s2, 's1和s2相等吗?', s1 == s2, 's1的id=', id(s1), 's2的id=', id(s2))# 符合标识符的字符串s1 = 'abc_12's2 = 'abc_12'print('s1是s2吗?', s1 is s2, 's1和s2相等吗?', s1 == s2, 's1的id=', id(s1), 's2的id=', id(s2))s3 = 'abc_12%'s4 = 'abc_12%'print('s3是s4吗?', s3 is s4, 's3和s4相等吗?', s3 == s4, 's3的id=', id(s3), 's4的id=', id(s4))# 字符串只在编译时进行驻留,并不是在运行时a = 'abc'b = 'ab' + 'c'c = ''.join(['ab', 'c'])  # 程序运行时print('a=', a, 'b=', b, 'a是b吗?', a is b)print('a=', a, 'c=', c, 'a是c吗?', a is c)# [-5, 256]之间的整数数字a = -6b = -6print('a=', a, 'b=', b, 'a是b吗?', a is b)# sys函数中的intern方法会强制两个字符串指向同一个对象a = 'abc%'b = 'abc%'print('a=', a, 'b=', b, 'a是b吗?', a is b)import sysa = sys.intern(b)print('a=', a, 'b=', b, 'a是b吗?', a is b)

结果输出:

交互模式:

----驻留机制分类----s1是s2吗? True s1和s2相等吗? True s1的id= 8133344 s2的id= 8133344s1是s2吗? True s1和s2相等吗? True s1的id= 38108192 s2的id= 38108192s3是s4吗? False s3和s4相等吗? True s3的id= 38108256 s4的id= 38108352a= abc b= abc a是b吗? Truea= abc c= abc a是c吗? Falsea= -6 b= -6 a是b吗? Falsea= abc% b= abc% a是b吗? Falsea= abc% b= abc% a是b吗? True

pycharm中输出:

----驻留机制分类----s1是s2吗?True s1和s2相等吗?True s1的id= 7543520 s2的id= 7543520s1是s2吗?True s1和s2相等吗?True s1的id= 34242368 s2的id= 34242368s3是s4吗?True s3和s4相等吗?True s3的id= 34242528 s4的id= 34242528a= abc b= abc a是b吗?Truea= abc c= abc a是c吗?Falsea= -6 b= -6 a是b吗?Truea= abc% b= abc% a是b吗?Truea= abc% b= abc% a是b吗?True

(二)字符串的常用操作

字符串,可以看做是关于字符的列表。

1.字符串对应有如下的查询操作:

功能 方法名称 作用
查询方法 index()

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

则抛出ValueError异常

rindex()

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

则抛出ValueError异常

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

代码示例:

# 'hello,python,hello'#  正向 逆向# h 0   -17# e 1   -16# l 2   -15# l 3   -14# o 4   -13# , 5   -12# p 6   -11# y 7   -10# ....# l 16  -2# o 17  -1s = 'hello,python,hello'print(s.index('lo'))print(s.find('lo'))print(s.rindex('lo'))print(s.rfind('lo'))# print(s.index('小潭'))  # ValueError: substring not foundprint(s.find('小潭'))# print(s.rindex('小潭'))  # ValueError: substring not foundprint(s.rfind('小潭'))

结果输出:

331616-1-1

2.字符串对应有如下的大小写转换操作:

功能 方法名称 作用
大小写转换 upper()

把字符串中所有的小写字母转换为大写字母

lower()

把字符串中所有的大写字母转换为小写字母

swapcase()

把字符串中所有大写字母转换为小写字母,

把所有小写字母转换为大写字母

capitalize() 把第一个字符转换为大写,把其余字符转换为小写
title() 把每个单词的第一个字符转换为大写,每个单词剩余字符转换为小写

代码示例:

s = 'hello,python'a = s.upper()  # 转换后会产生新的字符串对象print('原字符串s:', s, id(s))print('upper()转换后的字符串:', a, id(a))b = s.lower()print('lower()转换后的字符串:', b, id(b))s2 = 'hello,Python'print('原字符串s2:', s2)print('swapcase()转换后的字符串:', s2.swapcase())print('capitalize()转换后的字符串:', s2.capitalize())print('title()转换后的字符串:', s2.title())

结果输出:

原字符串s:hello,python 34720008upper()转换后的字符串:HELLO,PYTHON 8300128lower()转换后的字符串:hello,python 8301848原字符串s2:hello,Pythonswapcase()转换后的字符串:HELLO,pYTHONcapitalize()转换后的字符串:Hello,pythontitle()转换后的字符串:Hello,Python

3.字符串对应有如下的对齐操作:

功能 方法名称 作用
对齐 center()

居中对齐,第一个参数指定宽度,第二个参数指定填充符[可选,默认为空格],

如果设置宽度小于实际宽度则返回原字符串

ljust()

左对齐,第一个参数指定宽度,第二个参数指定填充符[可选,默认为空格],

如果设置宽度小于实际宽度则返回原字符串

rjust()

右对齐,第一个参数指定宽度,第二个参数指定填充符[可选,默认为空格],

如果设置宽度小于实际宽度则返回原字符串

zfill()

右对齐,左边使用0填充,该方法只接收一个参数,用于指定字符串的宽度,

如果指定的宽度小于等于字符串的长度,则返回原字符

代码示例:

s = 'hello,Python'  # 12个字符# 居中对齐print('居中对齐,带*填充:', s.center(20, '*'), '|')# 左对齐print('左对齐,带*填充:', s.ljust(20, '*'), '|')print('左对齐,小于实际宽度:', s.ljust(10), '|')print('左对齐,大于实际宽度:', s.ljust(20), '|')# 右对齐print('右对齐,带*填充:', s.rjust(20, '*'), '|')print('右对齐,小于实际宽度:', s.rjust(10), '|')print('右对齐,大于实际宽度:', s.rjust(20), '|')# 右对齐,使用0填充print('右对齐,用0填充:', s.zfill(20), '|')print('右对齐,用0填充但小于实际宽度:', s.zfill(10), '|')print('右对齐,用0填充:', '-8999'.zfill(8), '|')

结果输出:

居中对齐,带*填充:****hello,Python**** |左对齐,带*填充:hello,Python******** |左对齐,小于实际宽度:hello,Python |左对齐,大于实际宽度:hello,Python         |右对齐,带*填充:********hello,Python |右对齐,小于实际宽度:hello,Python |右对齐,大于实际宽度:hello,Python |右对齐,用0填充:00000000hello,Python |右对齐,用0填充但小于实际宽度:hello,Python |右对齐,用0填充:-0008999 |

4.字符串对应有如下的劈分操作:

功能 方法名称 作用
劈分 split() 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回值是一个列表
通过参数sep指定劈分字符

通过参数maxsplit指定最大劈分次数,超过最大劈分次数后,

剩余子串单独成为一部分

rsplit() 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回值是一个列表
通过参数sep指定劈分字符

通过参数maxsplit指定最大劈分次数,超过最大劈分次数后,

剩余子串单独成为一部分

代码示例:

s = 'hello| python| and| world'# 从左劈分print('split():', s.split())print("split(sep='|'):", s.split(sep='|'))print("split(sep='|', maxsplit=1):", s.split(sep='|', maxsplit=1))# 从右劈分print('rsplit():', s.rsplit())print("rsplit(sep='|'):", s.rsplit(sep='|'))print("rsplit(sep='1', maxsplit=1):", s.rsplit(sep='|', maxsplit=1))

结果输出:

split():['hello|', 'python|', 'and|', 'world']split(sep='|'):['hello', ' python', ' and', ' world']split(sep='|', maxsplit=1):['hello', ' python| and| world']rsplit():['hello|', 'python|', 'and|', 'world']rsplit(sep='|'):['hello', ' python', ' and', ' world']rsplit(sep='1', maxsplit=1):['hello| python| and', ' world']

4.字符串对应有如下的劈分操作:

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

代码示例:

s = 'hello, python'print('s.isidentifier:', s.isidentifier())print('hello.isidentifier:', 'hello'.isidentifier())print('小潭_.isidentifier:', '小潭_'.isidentifier())print('小潭_abc.isidentifier:', '小潭_abc'.isidentifier())print('\\t.isspace:', '\t'.isspace())print('abc.isalpha:', 'abc'.isalpha())print('小潭.isalpha:', '小潭'.isalpha())print('小潭abc.isalpha:', '小潭abc'.isalpha())print('123.isdecimal:', '123'.isdecimal())print('小潭123.isdecimal:', '小潭123'.isdecimal())print('123.isnumeric:', '123'.isnumeric())print('123四.isnumeric:', '123四'.isnumeric())print('123四Ⅴ.isnumeric:', '123四Ⅴ'.isnumeric())print('abc1.isalnum:', 'abc1'.isalnum())print('小潭123.isalnum:', '小潭123'.isalnum())print('小潭!.isalnum:', '小潭!'.isalnum())

结果输出:

s.isidentifier:Falsehello.isidentifier:True小潭_.isidentifier:True小潭_abc.isidentifier:True\t.isspace:Trueabc.isalpha:True小潭.isalpha:True小潭abc.isalpha:True123.isdecimal:True小潭123.isdecimal:False123.isnumeric:True123四.isnumeric:True123四Ⅴ.isnumeric:Trueabc1.isalnum:True小潭123.isalnum:True小潭!.isalnum:False

5.字符串对应有如下的替换和合并操作:

功能 方法名称 作用
替换 replace()

第一个参数指定被替换的子串,第二个参数指定替换字串的字符串。

该方法返回替换后的字符串,替换前的字符串不发生改变。

调用该方法时可以通过第三个参数指定最大替换次数

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

代码示例:

s = 'hello,Python,Python,Python,C++,java'print(s.replace('Python', 'Java'))print(s.replace('Python', 'C', 2))print('-----------')lst = ['hello', 'java', 'and', 'python']print('|'.join(lst))print(''.join(lst))print('-----------')t = ('hello', 'java', 'and', 'python')print(''.join(t))print('-----------')print('*'.join('python'))

结果输出:

hello,Java,Java,Java,C++,javahello,C,C,Python,C++,java-----------hello|java|and|pythonhellojavaandpython-----------hellojavaandpython-----------p*y*t*h*o*n

以上是python中有关字符串的定义和相关操作的介绍,鉴于篇幅原因,将在下期补充字符串的比较,切片,格式化以及编码转换的相关操作,另外我们也将学习python中函数的知识,敬请期待。

下期预告:python中的函数

c++ 字符串中的字符无效_13python中的字符串相关推荐

  1. c#给定编码中的字符无效_C#程序检查给定的字符串是否等于(==)运算符

    c#给定编码中的字符无效 Input two strings and check whether they are equal or not using C# program. 输入两个字符串,并使用 ...

  2. Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效

    目录 直奔主题 为什么字符集编码用ANSIC和UNICODE还不够,还需要使用UTF-8呢? 查看默认编码格式 windows批处理遇到的相关问题 CMake遇到的相关问题 C/C++字符编码转换 转 ...

  3. 关于VS2017调试时,字符数组显示字符串中的字符无效问题

    关于VS2017调试时,字符数组显示"字符串中的字符无效"问题 1.如果已经分配过内存,可能是越界导致的指令错误. 2.可能是字符数组成员的值超出了ASCII码表示范围,导致字符无 ...

  4. 操作XML 报错:根级别上的数据无效 和 给定编码中的字符无效 解决办法

    根级别上的数据无效,解决如下: private void button1_Click(object sender, EventArgs e) { try { XmlDocument doc = new ...

  5. java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:

    import java.util.ArrayList; import java.util.Scanner;/*** 7. 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:* 原始字 ...

  6. c语言字符串中的字符无效,字符串操作

    字符串主要用于编程,字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的.字符串也有很多操作,在正文将对C语言.C++和java中对其操作进行介绍. 中文名 字符串操作 外文名 strin ...

  7. string 字符串中字符无效_7.3 C++字符串类 | 使用string输出

    C++字符串类 C++提供了一种新的数据类型:字符串类型,它和char,int类型一样,可以用来定义变量,用一个名字代表一个字符序列,这就是字符串变量. 读者需要明白string并不是C++本身具有的 ...

  8. string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?

    通过可见字符建模 把JavaScript中的string当作字符序列来看待是最直观的,虽然这样并不准确. 以下代码示例中的字符串由5个字母和一个感叹号组成: const message = 'Hell ...

  9. java统计字符串中每个字符出现的次数,统计字符串中每个字符出现的次数

    本文收集整理关于统计字符串中每个字符出现的次数的相关议题,使用内容导航快速到达. 内容导航: Q1:c语言统计字符串中每个字符出现的次数 一.算法分析: 要统计每个字符出现的个数,那么就要为每个字符做 ...

最新文章

  1. 教育部:浙江大学等35所高校新增人工智能本科专业
  2. Spring MVC学习总结(16)——SpringMVC运行流程深度解析(含代码)
  3. 卸载mysql的步骤_卸载MySQL数据库的完整步骤(图)
  4. 从RTS游戏看游戏开发-2
  5. Python爬虫——Python基础笔记
  6. JFrame+JButton简单使用(菜鸟入门)——JAVA
  7. 凤凰架构4——透明多级分流系统
  8. 设计模式_访问者模式
  9. 怎么设置计算机硬盘密码,移动硬盘如何设置密码【操作步骤】
  10. 疫情让“灵活用工”浮出水面,作为Android开发的你“灵活用工”了吗?
  11. 【麒麟操作系统软件商店老是闪退?--麒麟系统软件商店卸载与重装(小白教程)】
  12. oracle中minus什么意思,Oracle Minus关键字
  13. golang转换时间格式报missing Location in call to Date
  14. 短裙高跟丝袜外拍,真的很漂亮哦!
  15. Android销毁活动是什么意思,android – 服务自动被要求销毁活动
  16. centos7错误:can‘t create 事务 lock on /var/lib/rpm/.rpm.lock (权限不够)切换root用户
  17. 文本分析——分配单词权重
  18. 如何学习数据库(新手必看)!
  19. 2019华为机试题 解析文本
  20. 台达触摸屏与多台变频器485通信 温控器通信

热门文章

  1. swift UI专项训练15 PcikerView老虎机视图
  2. 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市
  3. 网络运维在经济危机中茁壮成长
  4. JQuery实现radio、select、checkbox禁用
  5. javascript数组对象
  6. C语言可变参数函数的使用及相关函数介绍
  7. 归并排序的C++实现
  8. php5.4 的 php-fpm 的重启
  9. 专注于分布式存储计算技术及其应用url http://www.nosqlnotes.net/
  10. Ubuntu Linux下使用锐捷认证的方法