目录
字符串基本特点
字符串的本质是:字符序列。
Python 的字符串是不可变的,我们无法对原字符串做任 何修改。但可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。
字符串的编码
Python3 的字符 默认就是 16 位 Unicode 编码(可以表示世界上任何书面语言的字符),ASCII 码是 Unicode 编码的子集。
内置函数ord()——把字符串转换成对应的Unicode码
内置函数chr()——把十进制的Unicode码转换成对应的字符串
字符串的创建
我们可以通过单引号或双引号创建字符串。例如:a=’abc’; b=”sxt”
用连续三个单引号或三个双引号(目的是与字符串内部的引号区分开来),可以帮助我们创建多行字符串
如:resume = ''' name="gaoqi"
company="sxt" age=18
lover="Tom""'
练习:
创建一个I'm a teacher这样的字符串
#方法1
a="I'm a teacher"
print(a)
I'm a teacher
#方法2
a='I\'m a teacher' #用转义字符\来创建字符串本身包含的引号
print(a)
I'm a teacher
转义字符
我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果
字符串的拼接
1. 可以使用+将多个字符串拼接起来。例如:’12’+ ’23’ ==>’1223’
2. 可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’==>’aabb’
字符串的复制
使用*可以实现字符串的赋值操作。例如:a='stc'*3 ==>'stcstcstc'
不换行打印
在调用 print 时,会自动打印一个换行符。当不想换行时,我们可以通过参数 end = “任意字符串”。实现末尾添加任何内容
(需要建立源文件再运行)
例如:
print("stx",end='&')
print("stx",end='&')
print("stx",end='&')
#运行结果
stx&stx&stx&
str()实现数字转型字符串
str()可以帮助我们将其他数据类型转换为字符串。例如:str(5.20) ==> ‘5.20’
当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转成了字符串。
字符串的提取和切片
字符串本质是有序的字符序列,它支持双向索引,我们可以通过在字符串后面添加[],在[]里面指定偏移量, 可以提取该位置的单个字符。
例如,一个字符串x="abcdefghij"
正向搜索它最左侧开始第一个字符对应的索引序号(偏移量)是0,依次往右,直到最后一个字符对应的序号是len(x)-1
反向搜索是从右往左,序号依次是-1 到len(x),如下图所示:
正向索引标号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
字符串 | a | b | c | d | e | f | g | h | i | j |
反向索引标号 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
- 提取操作:
>>> x="abcdefghij"
>>> x[0]
'a'
>>> x[-10]
'a'
>>>
- 切片slice操作:
标准格式:[起始偏移量 start:终止偏移量 end:步长 step] 默认的步长为1,
常见操作如下:
>>>x='abcdefghij'
>>> x[:] #[:] 提取整个字符串
'abcdefghij'
>>> x[2:] #从序号2开始到结尾
'cdefghij'
>>> x[:-3] #从最左侧开始,到序号(-3)-1为止
'abcdefg'
>>> x[1:5:2] #从序号1开始到序号(5-1)切片,步长为2
'bd'
>>> x[-8:-3] #从序号-8开始到序号(-3-1)切片
'cdefg'
>>> x[::-1]
'jihgfedcba' #步长为负,从右到左反向提取
Note:
字符串切片区间[start,end),规定是左闭右开,即包头不包尾,步长不写默认是1
当字符串的步长为负时,表示从右往左反向提取
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 ', '']
join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:
>>>a=['sxt','sxt10','st20']
>>> ''.join(a)
'sxtsxt10st20'
>>> '*'.join(a)
'sxt*sxt10*st20'
replace()实现字符串替换
字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符 串来实现。
整个过程中,实际上我们是创建了新的字符串对象2,并把它指向了变量 a,而不是修改了以前的 字符串对象1。
字符串的拼接join()和拼接符+效率对比测试
结论:说明使用join函数比+拼接符效率高,随着循环次数的增加,他们之间差距会更加明显,因此不推荐使用+来拼接字符串
另外,使用字符串拼接符+,会生成新的字符串对象。而join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象。
字符串驻留机制和字符串比较
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。
字符串的比较和同一性
用== ,!=对两个字符串进行比较,是比较否含有相同的字符。
用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是 否和 id(obj2)相等。
成员操作符
in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。
字符串常用方法汇总
1.常用查找方法(示例:a='''我是高淇,今年 18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他 6 岁了。我 是一个编程教育的普及者,希望影响 6000 万学习编程的中国人。我儿子现在也开始学习编 程,希望他 18 岁的时候可以超过我''')
方法 | 说明 |
len(a) | 字符串长度 |
a.startswith('我是高淇') | 判断是否以指定字符串开头 |
a.endswith('过我') | 判断是否以指定字符串结尾 |
a.find('高') | 第一次出现指定字符串的位置 |
a.rfind('高') | 最后一次出现指定字符串的位置 |
a.count("编程") | 指定字符串出现了几次 |
a.isalnum() | 判断所有字符全是字母或数字 |
2.去除首尾信息
通过 strip()去除字符串首尾指定信息。通过 lstrip()去除字符串左边指定信息, rstrip()去除字符串右边指定信息。
3.大小写转换
例如:a="gao qi love SXT"
示例 | 说明 | 结果 |
a.capitalize() | 产生新的字符串,首字母大写 | 'Gao qi love sxt' |
a.title() | 产生新的字符串,每个单词都首字母大写 | 'Gao Qi Love Sxt' |
a.upper() | 产生新的字符串,所有字符全转成大写 | 'GAO QI LOVE SXT' |
a.lower() | 产生新的字符串,所有字 符全转成小写 | 'gao qi love sxt' |
a.swapcase() | 产生新的,所有字母大小写转换 | 'GAO QI LOVE sxt' |
4.格式排版
center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下:
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.ljust(10,"*")
'SXT*******'
>>> a.rjust(10,"*")
'*******SXT'
5.其他方法
1. isalnum() 是否为字母或数字
2. isalpha() 检测字符串是否只由字母组成(含汉字)。
3. isdigit() 检测字符串是否只由数字组成。
4. isspace() 检测是否为空白符
5. isupper() 是否为大写字母 6. islower() 是否为小写字母
字符串的格式化
format()基本用法
#方法1 通过索引来填入对应的参数值
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'
#方法2 通过参数名来映射参数值
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是19'
填充与对齐
填充常跟对齐一起使用
^、< 、>分别是居中、左对齐、右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
例如:>>> "{:*>8}".format("245")
'*****245'
数字格式化
浮点数通过 f,整数通过 d 进行需要的格式化。
可变字符串
在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO 对象或 array 模块。
>>> import io #导入io模块
>>> s='hello sxt' #定义一个字符串s
>>> sio=io.StringIO(s) #重新生产一个新的可变字符串sio
>>> sio.seek(7) #指针指向sio字符串的索引号为7的位置
7
>>> sio.write('g') #在索引位置为7的地方写入字母g
1
>>> sio.getvalue() #读取变化后的sio字符串的值
'hello sgt'