Featured image of post python——字符串

python——字符串

python字符串

字符串

了解字符串

字符串

字符串的本质是:字符序列
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'
Licensed under CC BY-NC-SA 4.0