字符串
了解字符串
字符串
字符串的本质是:字符序列
python中的字符串是不可变的
字符串的编码
Python3直接支持Unicode,可以表示世界上任何书面语言的字符。Python3的字符默认就是16位 Unicode编码,ASCII码是Unicode编码的子集。
使用内置函数ord()可以把字符转换成对应的Unicode码
使用内置函数chr()可以把十进制数字转换成对应的字符。
空字符串和len()函数
Python允许空字符串的存在,不包含任何字符且长度为0
len()用于计算字符串含有多少字符
!注意:汉字和英文字符长度一样
转义字符
转义字符 | 描述 |
---|---|
\ | 续行符 |
\ | 反斜杠符号 |
\' | 单引号 |
\'' | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
字符串的创建
引号创建字符串
通过单引号或双引号创建字符串。例如:a=’abc’; b=”sxt”
字符串的操作
字符串拼接
可以使用+将多个字符串拼接起来
a. 如果+两边都是字符串,则拼接。
b. 如果+两边都是数字,则加法运算。
c. 如果+两边类型不同,则抛出异常。
可以将多个字面字符串直接放到一起实现拼接。
字符串复制
使用*可以实现字符串复制。
不换行打印
通过参数end = “任意字符串”。实现末尾添加任何内容:
eg:print(“aa”,end="*") print(“bb”,end="##") print(“cc”,end="\t")
从控制台读取字符串
使用input()从控制台读取键盘输入的内容
myname=input(“请输入你的名字”)
请输入你的名字:韩明
myname
‘韩明’
!在input()函数处执行了阻塞和等待
str()实现数字转型字符串
str()可以帮助我们将其他数据类型转换为字符串
eg: str(5.20) ==> ‘5.20’ str(3.14e2)==>’314.0’ str(True) ==> ‘True’
使用[]提取字符
过在字符串后面添加[],在[]里面指定偏移量,可以提取 该位置的单个字符
正向搜索: 最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推。直到len(str)-1为止。
反向搜索: 最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
replace()实现字符串替换
字符串不可改变
通过创建新的字符串来实现字符串替换
整个过程中,实际上我们是创建了新的字符串对象,并指向了变量a,而不是修改了以前的字符串。
字符串切片slice操作
切片slice操作可以让我们快速的提取子字符串
包头不包尾
标准格式为: [起始偏移量start:终止偏移量end:步长step]
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','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
拼接字符串要点
使用字符串拼接符+,会生成新的字符串对象 不推荐
推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一 次对象。
字符串驻留机制和字符串比较
字符串驻留
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中
>>> a = "abd_33"
>>> b = "abd_33"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']————————列表
>>> a.split('be')
['to ', ' or not to ', '']
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
字符串比较和同一性
== / != 判断是否含有相同的字符
is / not is 比较的是对象的地址是否相同
成员操作符
in /not in 判断某个字符(子字符串)是否存在于字符串中
>>> a="abcdefg"
>>> "abc"in a
True
>>> "abc" not in a
False
字符串常用方法汇总
常用查找方法
字符串长度:len(a)
以指定字符串开头:a.startwith(‘abcd’)
以指定字符串开头:a.startwith(‘xyz’)
第一次出现指定字符串的位置:a.find(‘good’)
最后一次出现指定字符串的位置:a.rfind(‘good’)
指定字符串出现了几次 :a.count(“good”)
所有字符全是字母或数字: a.isalnum()
去除首尾信息
strip()去除字符串首尾指定信息
lstrip()去除字符串左边指定信息
rstrip()去除字符串右边指定信息
去除字符串首尾信息
>>> "*s*x*t*".strip("*")
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " sxt ".strip()
'sxt'
大小写转换
产生新的字符串,首字母大写 :a.capitalize()
产生新的字符串,每个单词都首字母大写 :a.title()
产生新的字符串,所有字符全转成大写: a.upper()
产生新的字符串,所有字符全转成小写: a.lower()
产生新的,所有字母大小写转换 :a.swapcase()
格式排版
center()、ljust()、rjust()这三个函数用于对字符串实现排版
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.ljust(10,"*")
'SXT*******'
其他方法
isalnum() 是否为字母或数字
isalpha() 检测字符串是否只由字母组成(含汉字)。
isdigit() 检测字符串是否只由数字组成。
isspace() 检测是否为空白符
isupper() 是否为大写字母
islower() 是否为小写字母
字符串的格式化
字符串的格式化
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。 基本语法是通过 {} 和 : 来代替以前的 %
format 函数可以接受不限个参数,位置可以不按顺序
>>> a="我的名字是:{0},年龄是:{1}" >>> a.format("韩明",20) '我的名字是:韩明,年龄是:20' >>> a.format("韩知宜",8) '我的名字是:韩知宜,年龄是:8' >>> b=" 我的名字是:{name},我今年{age}岁了,{name}在金马小学上学" >>> b.format(name="韩知宜",age=8) ' 我的名字是:韩知宜,我今年8岁了,韩知宜在金马小学上学' 我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化,非常方便。
填充与对齐
填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,
后面带宽度:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
>>> "{:*>8}".format("245")
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("韩明","666")
'我是韩明,我喜欢数字**666***
数字格式化
浮点数通过f,整数通过d进行需要的格式化
>>> a = "我是{0},我的存款有{1:.2f}"
>>> a.format("韩明",3888.234342)
'我是韩明,我的存款有3888.23'
可变字符串
我们需要原地修改字符串,可以使用io.StringIO对象或array模块
>>> import io
>>> s="hello sxt"
>>> sio=io.StringIO(s)
>>> sio
<_io.StringIO object at 0x000001D0C5D16048>
>>> sio.getvalue()
'hello sxt'
>>> sio.seek(7)#指针
7
>>> sio.write("g")
1
>>> sio.getvalue()
'hello sgt'