c++ 字符串中的字符无效_13python中的字符串
点击蓝色“潭时录”关注我丫
加个“星标”,每天和小潭一起快乐的学习
你好,我是在学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中的字符串相关推荐
- c#给定编码中的字符无效_C#程序检查给定的字符串是否等于(==)运算符
c#给定编码中的字符无效 Input two strings and check whether they are equal or not using C# program. 输入两个字符串,并使用 ...
- Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效
目录 直奔主题 为什么字符集编码用ANSIC和UNICODE还不够,还需要使用UTF-8呢? 查看默认编码格式 windows批处理遇到的相关问题 CMake遇到的相关问题 C/C++字符编码转换 转 ...
- 关于VS2017调试时,字符数组显示字符串中的字符无效问题
关于VS2017调试时,字符数组显示"字符串中的字符无效"问题 1.如果已经分配过内存,可能是越界导致的指令错误. 2.可能是字符数组成员的值超出了ASCII码表示范围,导致字符无 ...
- 操作XML 报错:根级别上的数据无效 和 给定编码中的字符无效 解决办法
根级别上的数据无效,解决如下: private void button1_Click(object sender, EventArgs e) { try { XmlDocument doc = new ...
- java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
import java.util.ArrayList; import java.util.Scanner;/*** 7. 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:* 原始字 ...
- c语言字符串中的字符无效,字符串操作
字符串主要用于编程,字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的.字符串也有很多操作,在正文将对C语言.C++和java中对其操作进行介绍. 中文名 字符串操作 外文名 strin ...
- string 字符串中字符无效_7.3 C++字符串类 | 使用string输出
C++字符串类 C++提供了一种新的数据类型:字符串类型,它和char,int类型一样,可以用来定义变量,用一个名字代表一个字符序列,这就是字符串变量. 读者需要明白string并不是C++本身具有的 ...
- string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?
通过可见字符建模 把JavaScript中的string当作字符序列来看待是最直观的,虽然这样并不准确. 以下代码示例中的字符串由5个字母和一个感叹号组成: const message = 'Hell ...
- java统计字符串中每个字符出现的次数,统计字符串中每个字符出现的次数
本文收集整理关于统计字符串中每个字符出现的次数的相关议题,使用内容导航快速到达. 内容导航: Q1:c语言统计字符串中每个字符出现的次数 一.算法分析: 要统计每个字符出现的个数,那么就要为每个字符做 ...
最新文章
- 教育部:浙江大学等35所高校新增人工智能本科专业
- Spring MVC学习总结(16)——SpringMVC运行流程深度解析(含代码)
- 卸载mysql的步骤_卸载MySQL数据库的完整步骤(图)
- 从RTS游戏看游戏开发-2
- Python爬虫——Python基础笔记
- JFrame+JButton简单使用(菜鸟入门)——JAVA
- 凤凰架构4——透明多级分流系统
- 设计模式_访问者模式
- 怎么设置计算机硬盘密码,移动硬盘如何设置密码【操作步骤】
- 疫情让“灵活用工”浮出水面,作为Android开发的你“灵活用工”了吗?
- 【麒麟操作系统软件商店老是闪退?--麒麟系统软件商店卸载与重装(小白教程)】
- oracle中minus什么意思,Oracle Minus关键字
- golang转换时间格式报missing Location in call to Date
- 短裙高跟丝袜外拍,真的很漂亮哦!
- Android销毁活动是什么意思,android – 服务自动被要求销毁活动
- centos7错误:can‘t create 事务 lock on /var/lib/rpm/.rpm.lock (权限不够)切换root用户
- 文本分析——分配单词权重
- 如何学习数据库(新手必看)!
- 2019华为机试题 解析文本
- 台达触摸屏与多台变频器485通信 温控器通信
热门文章
- swift UI专项训练15 PcikerView老虎机视图
- 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市
- 网络运维在经济危机中茁壮成长
- JQuery实现radio、select、checkbox禁用
- javascript数组对象
- C语言可变参数函数的使用及相关函数介绍
- 归并排序的C++实现
- php5.4 的 php-fpm 的重启
- 专注于分布式存储计算技术及其应用url http://www.nosqlnotes.net/
- Ubuntu Linux下使用锐捷认证的方法