字符串讲解
1、字符串的基本特点
字符串的本质是字符序列。Python中的字符串是不可变的,我们无法对原字符串做任何修改,但是,我们可以将字符串的一部分复制到新创建的字符串中,达到看起来修改的样子。
Python中字符串是一种基本类型,在Python中没有字符,即使是单个字符也是一个字符串。
2、字符串的编码
Python3中采用Unicode编码,可以表示世界上任何书面语言的字符,即采用16位Unicode编码,ASCII码是Unicode编码的自己。以下两个函数可以进行相互之间的转换:
>>>ord('A') #使用内置函数ord()可以把字符转换成对应的Unicode码
65
>>>ord('高')
39640
>>>chr(66) #使用内置函数chr()可以把十进制数字转换成对应的字符
'B'
3、引用创建字符串
我们可以使用单引号或者双引号创建字符串。
>>>a = "abcdefghijklmnopq"
>>>print(a)
abcdefghijklmnopq
>>>b = 'abcdefghijklmnopq'
>>>print(b)
abcdefghijklmnopq
>>>c = "I'm a teacher" #如果字符串中含有单引号则使用双引号创建字符串
>>>print(c)
I'm a teacher
>>>d = 'My name is "TOM"'
>>>print(d)
My name is "TOM"
>>>resume = '''name = "TOM"
company = "美团" age = 21
lover = "MOM"'''
#用连续三个单引号或者连续三个双引号可以创建多行字符串
>>>print(resume)
name = "TOM"\ncompany = "美团" age = 21\nlover = "MOM"
4、空字符串和len()函数
Python中允许空字符串的存在, 不包含任何字符且长度为0。使用len()函数可以计算字符串的长度。例如:
>>>a = ''
>>>len(a)
0
>>>b = 'hjk影'
>>>len(b)
4 #汉字和英文字符地位一样,都代表一个字符
5、转义字符
(1)可以使用+将多个字符串拼接起来。
————如果+两边都是字符串,则拼接。
————如果+两边都是数字,则加法运算。
————如果+两边类型不同,则抛出异常。
(2)可以将多个字符串直接放到一起实现拼接,多个字符串之间使用空格分开即可。
>>>a = 'sxt'+'gaoqi'
>>>print(a)
sxtgaoqi
>>>b = 'sxt' 'gaoqi'
>>>print(b)
sxtgaoqi
>>>c = 3 + 4
>>>print(c)
7
>>>d = 3 + 'a'
Error
7、字符串复制
使用*可以实现字符串的复制。例如:
>>>a = 'Sxt'*3
>>>print(a)
'SxtSxtSxt'
8、不换行打印
Python中在调用print函数时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行符。我们可以通过使用end=“任意字符串”实现末尾添加任何内容:
print("sxt",end=' ')
print("gaoqi",end='###')
print('bang')
#执行结果如下:
sxt gaoqi###bang
9、从控制台读取字符串
可以使用input()从控制台读取键盘输入的内容:
>>>myname = input("请输入名字:") #此处进程处于阻塞等待状态
请输入名字:肉骨茶
>>>print(myname)
肉骨茶
10、str()函数
str()函数用来将其他数据类型转换为字符串。当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转换成了字符串。
str()用法;
>>>str(5.20)
'5.2'
>>>str(314)
'314'
>>>str(3,14e2)
'314.0'
>>>str(True)
'True'
11、使用[ ]提取字符
在Python中我们可以通过在字符串后面添加[ ]在[ ]里面指定偏移量,可以提取该位置的单个字符。
(1)正向搜索:最左边第一个字符,偏移量是0,第二个偏移量是1,以此类推,直到len(str)-1为止。
(2)反向搜索:最右边第一个字符,偏移量是-1,倒数第二个的偏移量是-2,以此类推,直到-len(str)为止。
>>>a = 'abcdefghijklmnopqrstuvwxyz'
>>>print(a)
abcdefghijklmnopqrstuvwxyz
>>>a[0]
'a'
>>>a[26-1]
'z'
>>>a[-1]
'z'
>>>a[-26]
'a'
>>>a[-27]
Error
>>>a[26]
Error
12、replace()实现字符串替换
在Python中字符串是“不可改变的”,我们可以通过[ ]获取字符串指定位置的字符,但是我们不可以改变字符串,我们尝试改变字符串中某个字符,会报错,例如:
>>>a = 'abcdefghijklmnopqrstuvwxyz'
>>>a
'abcdefghijklmnopqrstuvwxyz'
>>>a[3] = '高'
Error
但是我们可以使用replace()替换某个字符,但其本质是创建一个新的字符串来实现。
>>>a = 'abcdefghijklmnopqrstuvwxyz'
>>>a
'abcdefghijklmnopqrstuvwxyz'
>>>a = a.replace('c','高')
>>>a
'ab高defghijklmnopqrstuvwxyz'
13、字符串切片
切片操作可以让我们快速提取字符串,其标准格式是:
[其实偏移量start:终止偏移量end:步长step]
其典型的操作有如下几种:
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围内也不会报错。起始偏移量小于0则会被当做是0,终止偏移量大于“长度-1”会被当做是字符长度-1。例如:
>>>"abcdefg"[3:50]
'defg'
练习:
1、将“to be or not to be”字符串倒序输出
>>>"to be or not to be"[::-1]
'eb ot ton ro eb ot'
2、将“sxtsxtsxtsxtsxt”字符串中所有的s输出
>>>"sxtsxtsxtsxtsxt"[::3]
'sssss'
14、split()分割和join合并
split()可以基于指定的分隔符将字符串分割成多个子字符串(存储在列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。例如:
>>>a = "to be or not to be"
>>>a.split()
['to','be','or','not','to','be']
>>>a.split('be')
['to ',' or not to ',''] #注意be后面有一个空字符串
join()的作用和split()的作用刚好相反,用于将一系列子字符串连接起来。例如;
>>>a = ['rgc','rgc100','rgc200']
>>>'*'.join(a)
'rgc*rgc100*rgc200'
拼接字符串要点:
使用字符串拼接+,会产生新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。用代码测试情况如下所示:
15、字符串驻留机制和字符串的比较
(1)字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线、字母和数字)会启用字符串驻留机制。
>>>a = "abd_123"
>>>b = "abd_123"
>>>a is b
True
>>>c = "dd##"
>>>d = "dd##"
>>>c is d
False
>>>c == d
True
(2)成员操作符:in/not in 关键字,判断某个字符(子字符串)是否在一个字符串中。例如:
>>>a = "abcdefghijkl"
>>>"b" in a
True
>>>"bcd" in a
True
>>>"ddd" in a
False
>>>"ddd" not in a
True
16、字符串常用方法汇总
(1)查找方法
示例:a=’’‘我是高淇,今年18岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他6岁了。我是一个编程教育的普及者,希望影响6000万学习编程的中国人。我儿子现在也开始学习编程,希望他18岁的时候可以超过我’’’
(2)去除首尾信息strip()函数
(3)大小写转换
(4)格式排版
其中10代表一共10个字符,“*”表示总字符少于10个则用星号填充。
(1)format()函数
(2)填充与对齐
填充与对齐一起使用。
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
例如:
>>>"{:*>8}".format("245")
'*****245'
>>>"我是{0},我喜欢数字{1:*^8}".format("肉骨茶","666")
'我是肉骨茶,我喜欢的数字是**666***'
(3)数字格式化
例如:
>>>a = "我是{0},我的存款有{1:.2f}"
>>>a.format("肉骨茶","2345.2345")
'我是肉骨茶,我的存款有2345.23'
18、可变字符串
在Python中,字符串是可变的,但是当频繁的修改某一个字符串时,如果是使用replace()函数,就会生成多个对象,故可以使用io.StringIO对象来修改字符串的值。
例如:
>>>import io
>>>s = "hello,rgc"
>>>sio = io.StringIO(s)
>>>sio
<io.StringIO object at 0x02F462B0
>>>sio.getvalue()
'hello,rgc'
>>>sio.seek(7) #指针移动到第7个位置
7
>>>sio.write("r")
1
>>>sio.getvalue()
'hello,rgc'
io.StringIO对象不会生成新的字符串对象,在修改的过程中是在sio一个对象中进行修改。