Python的字符串示例讲解

之前我们学习过一个不可变的序列叫元组,今天我们探讨的字符串,也是一个不可变序列。

1. 字符串的创建

一个概念: 字符串的驻留机制
那什么是字符串的驻留机制呢?
意思是: 仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时候,不会开辟新的空间,而是把该字符串的地址重新赋值给新建的变量。

1) 字符串的定义

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
a=\'itlaoxin\'
b=\"itlaoxin\"
c=\'\'\'itlaoxiin\'\'\'
print(a,b,c,id(a),id(b),id(c))

输出结果

Python的字符串示例讲解

可以看到ID都是一样的。

在内存中只有一份

几点注意事项:
在交互模式下,能实现驻留机制的情况:

字符串的长度为0 或者1时
符合标识符的字符串
字符串只在编译时候进行驻留,而非运行时
【-5,256】之间的整数数字

Python的字符串示例讲解 

2. 字符串的常用操作

关于字符串的操作,我们可以把字符串看成是关于字符的列表:

1) 查询操作

 index() 查找字符串substr第一次出现的位置,如果查找的子串不存在,抛出异常
rindex() 查找字符串substr最后一次出现的问题,如果不存在,则报异常
find() 查找子串substr第一次出现的位置,不存在返回-1
rfind 查找子串substr最后一次出现的位置,若不存在返回 -1

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\'hello,world\'
print(s.index(\'l\')) #2
print(s.find(\'l\')) #2
print(s.rfind(\'l\')) #9
print(s.rindex(\'l\')) #9

这里建议大家使用find,或者rfind,因为不会报异常

2) 字符串的常用操作

 a) 大小写转换

upper() 把字符串中所有的字符都转化成大写字母(会产生新的字符串对象)

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
a=s.upper()
print(s)
print(a)

lower() 把字符串中所有的字符都转换成小写字母

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
a=s.lower()
print(s)
print(a)

输出结果:

hello,ITlaoxin
hello,itlaoxin

swapcase() 把字符串中所有的大写字母转换成小写字母,把所有的小写字母转换成大写字母

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
a=s.swapcase()
print(a,id(a))
print(s,id(s))

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

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
a=s.title()
print(a)

b) 字符串内容对齐操作

center() 居中对齐

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
print(s.center(20,\'*\'))

Python的字符串示例讲解

一共14个字符,定义20个字符,左右各三个

ljust() 左对齐


# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
print(s.ljust(20,\"*\"))

Python的字符串示例讲解

如果不写* ,默认是空格

rjust 右对齐

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
print(s.rjust(20,\"*\"))

Python的字符串示例讲解

zfill 右对齐

这种方式会用0填充

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
print(s.zfill(20))

Python的字符串示例讲解

c) 字符串的拆分

 split() 分割,从左边开始,默认的分割符是空格,分割完后是列表

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello,ITlaoxin\"
lst=s.split()
print(lst)

输出结果:

我们可以指定分割符,用sep=‘|\’ 的形式

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello|ITlaoxin|gaosh\"
lst=s.split(sep=\'|\')
print(lst)

输出结果

[\’hello,ITlaoxin\’]

如果这个地方我们用默认的空格会是什么结果:

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello|ITlaoxin|gaosh\"
lst=s.split()
print(lst)

结果

[\’hello|ITlaoxin|gaosh\’]

可以看到,因为这个字符串中没有空格,所以他就是一个元素的列表。

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello|ITlaoxin|gaosh\"
lst=s.split(sep=\'|\',maxsplit=1)
print(lst)

结果:

[\’hello\’, \’ITlaoxin|gaosh\’]

这里只拆分了一次。

rsplit() 从字符右边开始拆分,默认拆分字符是空格,返回值是一个列表

maxsplit可以指定最大拆分次数

这个和split的使用方法一样,只是rsplist是从右边开始拆分,splist从左边拆分

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\"hello|ITlaoxin|gaosh\"
lst=s.split(sep=\'|\',maxsplit=1)
print(lst)

lst1=s.rsplit(sep=\'|\',maxsplit=1)
print(lst1)

结果如图所示:

Python的字符串示例讲解

d) 字符串的判断方法

isidentifier() 判断指定的字符串是否是合法的标识符
isspace() 判断指定的字符串是否全部由空白字符组成(回车,换行,水平指制表符)
issalpha() 判断字符串是否全部由字母组成
isdecimal( )判断指定字符串是否全部是十进制组成
isnumeric() 判断指定的字符串全部由数字组成
isalnum()判断指定字符串是否全部由字母和数字组成

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\'hello,world,python\'
print(\'1\',s.isidentifier())
print(\'2\',\'hello\'.isidentifier())
print(\'3\',\'\\t\'.isidentifier())
print(\'4\',\'abc\'.isspace())
print(\'5\',\'abc\'.isalpha())
print(\'6\',\'1\'.isspace())
print(\'7\',\'123\'.isnumeric())
print(\'8\',\'abc123\'.isalnum())
print(\'9\',\'123abc!\'.isalnum())

e) 字符串的其他操作 字符串的替换replace()

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
s=\'hello,world,python\'
print(s.replace(\'python\',\'itlaoxin\'))
s1=\'hello,python,python ,python\'
print(s1.replace(\'python\',\'itlaoxin\',2))

结果:

hello,world,itlaoxin
hello,itlaoxin,itlaoxin ,python

字符串的合并 join()

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
lst=[\'hello\',\'java\',\'python\']
print(\'|\'.join(lst))

结果:hello|java|python

f) 字符串的比较

使用运算符 >,>= ,<,<= ,= ,!=

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
print(\'1\',\'itlaoxin\'>\'laoxin\')
print(\'2\',\'itlaoxin\'>\'itlaox\')

结果:

 False
 True

如果第一个字母就不相同,就比较原始值 ord()

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
print(\'1\',\'itlaoxin\'>\'laoxin\')
print(\'2\',\'itlaoxin\'>\'itlaox\')
print(\'3\',\'python\'>\'java\')
## 相当于
print(ord(\'p\'),ord(\'j\'))

Python的字符串示例讲解

第三个相当于112与106比较

g) 字符串的切片

字符串是不可变类型,不具备增删改查的操作,切片是会产生新的对象的

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
a=\'hello,world,itlaoxin\'
print(a[:5])

输出结果:
hello

不写起始位置,它会从index0开始切

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
a=\'hello,world,itlaoxin\'
print(a[6:]) #world,itlaoxin

没有指定结束位置,会切到最后

step是指定步长

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
a=\'hello,world,itlaoxin\'
print(a[1:8:2]) #el,o
# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
a=\'hello,world,itlaoxin\'
print(a[1:8:2])
print(a[::2]) #hlowrdiloi

h) 格式化字符串

为什么要格式化字符串呢?
字符串的拼接会产生新的Id,会造成空间浪费, 这个时候就需要使用字符串的格式化。

格式化字符串的两种方式:
% 做占位符

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
#第一种方式%

name=\'互联网老辛\'
age=40
print(\'我叫%s,今年%d岁了\'%(name,age))

{} 做占位符

要使用到format()方法

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
#第一种方式%

name=\'互联网老辛\'
age=\'40\'
print(\'我叫{0},今年{1}岁了\'.format(name,age))

除此之外还可以表示精读和宽度:

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
print(\'%d\'% 99)

print(\'%10d\'% 99)

这里的10表示的就是宽度

精度:
保留3位小数

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
print(\'%.3f\' % 3.11516)

混合使用:

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6s
print(\'%10.3f\' % 3.11516)

%10.3f
总宽度为10,小数点保留3位

总结

到现在所有的数据类型的基本操作就介绍完了,这些应该都算是基础,接下来我们要进入到函数的章节。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容