编程语言
首页 > 编程语言> > 【Python从零到壹】Python的字符串详解

【Python从零到壹】Python的字符串详解

作者:互联网

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

文章目录


1. 字符串的创建

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

1) 字符串的定义

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

输出结果
在这里插入图片描述

可以看到ID都是一样的。

在内存中只有一份

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

2. 字符串的常用操作

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

1) 查询操作

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

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

2) 字符串的常用操作

a) 大小写转换

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

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

输出结果:
hello,ITlaoxin
hello,itlaoxin

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

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

b) 字符串内容对齐操作

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

在这里插入图片描述
一共14个字符,定义20个字符,左右各三个

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

在这里插入图片描述
如果不写* ,默认是空格

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

在这里插入图片描述

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

在这里插入图片描述

c) 字符串的拆分

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

输出结果:

['hello,ITlaoxin']

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

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

输出结果

['hello', 'ITlaoxin', 'gaosh']

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

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

结果

['hello|ITlaoxin|gaosh']

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

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

结果:

['hello', 'ITlaoxin|gaosh']

这里只拆分了一次。

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

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

结果如图所示:
在这里插入图片描述

d) 字符串的判断方法

# 作者:互联网老辛# 开发时间:2021/4/4/0004 6ss='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) 字符串的其他操作

# 作者:互联网老辛# 开发时间:2021/4/4/0004 6ss='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

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

结果:hello|java|python

f) 字符串的比较

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

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

结果:
1 False
2 True

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

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

在这里插入图片描述

第三个相当于112与106比较

g) 字符串的切片

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

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

输出结果:
hello

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

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

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

step是指定步长

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

# 作者:互联网老辛# 开发时间:2021/4/4/0004 6sa='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 6sprint('%d'% 99)print('%10d'% 99)

这里的10表示的就是宽度

精度:
保留3位小数

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

混合使用:

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

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

总结

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

我是互联网老辛,从事技术行业已经12年了,教育行业5年,也算是一个老人了。 今年开始把自己学到的东西分享出来,希望能够帮到大家,如果对你有用,可以点赞收藏。
您的每一次转发,收藏,都是对作者最大的鼓励。

标签:0004,Python,零到,字符串,详解,2021,print,老辛,hello
来源: https://blog.51cto.com/xinsz08/2690259