字符串
python字符串的本质是:字符序列。python的字符串是不可变的,我们无法对原字符串做任何修改。但可以将字符串的一部分复制到新字符串达到看起来是修改的结果。
Python不提供单字符类型,也就是char类型,单字符同样是作为字符串使用的。
字符串的编码
Python3直接支持Unicode,可以表示世界上任何书面语言的字符。
Python3的字符默认就是16位Unicode编码,ASCII码是Unicode的子集。
使用内置ord()可以将字符转换成对应的Unicode编码
使用内置chr()可以把十进制数字转换成对应的字符
创建字符串
直接使用双引号或者单引号可以直接创建字符串。
a="teacher"
注意:如果外引号和引号内的内容出现重复(即内容也出现相同引号),可以改变外引号。
连续三个引号可以创建多行字符串
resume = """
name='rain'
age=18
address='北京'
"""
Python允许空字符串的存在,不包含任何字符内容。
内置len()函数可以获取变量的长度,如数组长度,字符串长度等
c=""
print(len(c))
转义字符
我们可以使用”+特殊字符“实现某些难以用字符表示的效果。
字符串的拼接
- 可以用+将多个字符串拼接起来。
(1) 如果+两边都是字符串,则拼接
(2) 如果+两边都是数字,计算
(3) 如果+两边类型不同,抛出异常 - 可以将多个字面字符串放在一起实现拼接
b="rain""cloud"
print(b)
- 使用*可以实现字符串复制
a="rain"*3
print(a)
不换行打印
调用print时,会自动打印一个换行符。我们可以设定参数end=”任意字符串“,实现末尾添加任何内容。
print("rain",end='!')
print("cloud")
print("rain",end="**")
从控制台读取字符串
使用input()从控制台读取键盘缓冲区的输入内容。
input= input("请输入你的信息:")
print("你输入的信息是:",input)
str()数字转型字符串
str()可以其他数据类型转换为字符串。
print(str(5.20))
print(str(3.14e2))
print(str(True))
使用[]提取字符
字符串的本质是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量获取该位置的单个字符(也就是字符数组)
正向搜索:最左侧偏移量是0,[0:len(str)-1]
反向搜索:最右侧偏移量是-1,[-len(str):-1]
replace()实现字符串替换
a='abcdefghijklmnopqrstuvwxyz'
a.replace('c','高')
print(a)
"""
可以看见结果为
ab高defghijklmnopqrstuvwxyz
"""
之前我们说过python中字符串是不可改变的,其实replace()将a指向了一个新的字符串,而不是原来的那个字符串,所以原来的字符串的确没有改变,我们是复制了一个副本,在改变副本之后将a重定向指向到这个副本字符串对象。
字符串切片slice操作
切片slice操作可以让我们快速地提取子字符串。其实就是将字符串看成数组之后,在 [ ] 中对下标的一些操作技巧。
标准格式为:[ 起始下标 start :终止偏移量 end: 步长 step]
切片操作时,起始偏移量和终止偏移量不在[0:字符串长度-1]这个范围也不会报错,起始偏移量小于0则会当作0,终止偏移量大于”长度-1“,则会当作最后一个下标。
两个字符串操作的小例子
是自己写的小例子。
- 将 "to be or not to be"倒序输出
string = "to be or not to be"
#方法一 切片方法
print(string[::-1])
"""
官方的步长索引图,可见索引对着的是分隔,而不是字符。
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+ #步长为负数
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
"""
#方法二 循环方法
nstr=list(string)
for tag in range(len(string)-1,-1,-1):
print(nstr[tag],end="")
"""
range的函数参数意义
range(start, stop, step)
"""
#这个print仅作为控制台输出美观调整
print()
# 方法三 列表转换法
L=list(string)
L.reverse()
for letter in L:
print(letter,end="")
- 将 "sunsunsunsunsun"中的s输出
str = 'sunsunsunsunsun'
#方法一 切片法
print(str[0::3])
#方法二 循环法
for tag in range(0,len(str)):
if str[tag] == "s":
print(str[tag],end="")
split()分割和join()合并
split()可以基于指定分隔符将字符串分割成多个子字符串,并存储到列表中。
split()的语法格式:
str.split(str="", num=string.count(str))
参数:
- str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num – 分割次数。默认为 -1, 即分隔所有。
a="to be or not to be"
print(a.split())
"""
结果
['to', 'be', 'or', 'not', 'to', 'be']
"""
Python中有join()和os.path.join()两个函数,具体作用如下:
- join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
- os.path.join(): 将多个路径组合后返回
join()的作用和split()的作用刚好相反,用于将一系列子字符串合并成一个字符串。
join()的语法格式:
'sep'.join(str)
参数:
- sep:是指合并字符串之后,这个字符串中的分隔符,可以为空
- str:你要合并的元素序列、字符串、元组、字典
a=['to', 'be', 'or', 'not', 'to', 'be']
print("--".join(a))
"""
结果:
to--be--or--not--to--be
"""
字符拼接的要点
使用字符拼接符”+“,会生成新的字符串对象,因此不推荐使用,推荐使用列表和join()函数配合使用,join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
import time
time01 = time.time()
a=''
for i in range(100000):
a += "rain"
time02 = time.time()
print("+的运算时间",str(time02-time01))
time03 = time.time()
list=[]
for i in range(100000):
list.append('rain')
a = "".join(list)
time04 = time.time()
print("join运算时间:",str(time04-time03))
"""
结果:
+的运算时间 0.026947736740112305
join运算时间: 0.008952140808105469
s"""
字符串驻留机制和字符串比较
字符串驻留:你保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中,python支持字符串驻留机制,对于符合标识符规则的字符串会启用字符串驻留机制。
所谓驻留,是指相同的负责标识符规则的字符串对象会被保存在堆中,且仅有一个。而非标识符规则的字符串对象,有多少变量指向它就有多少个对象
a = "python"
b = "python"
print(a is b)
#return Ture
c = "python#"
d = "python#"
print(c is b)
#return False
字符串常用方法
常用查找方法
去除首尾信息
strip()可以去除字符串首尾指定信息。通过lstrip()去除字符串左边(开头)指定信息,rstrip()去除字符串右边(末尾)指定信息。
print("-r-a-i-n-".strip('-'))
print("-r-a-i-n-".lstrip('-'))
print("-r-a-i-n-".rstrip('-'))
"""
结果
print("-r-a-i-n-".strip('-'))
print("-r-a-i-n-".lstrip('-'))
print("-r-a-i-n-".rstrip('-'))
"""
大小写转换
a = "gaoqi love programming love SXT"
格式排版
center(str,width,fillchar),ljust(),rjust()这三个函数用于字符串排版,示例如下:
这三个函数的参数都一样:
- str:你要操作的字符串对象
- width:在多少的长度内进行排版
- fillchar:填充字符,如果字符串长度小于设定排版长度,则用该字符在空白处进行填充,默认为空格
a = "rain"
print(a.center(10))
print(a.center(10,"-"))
print(a.ljust(10,'-'))
"""
结果:
rain
---rain---
rain------
"""
其他方法
字符串的格式化
python常用格式化函数str.format()进行格式化。
format()函数可以接受不限个参数,位置可以按顺序。
a = '名字是:{0},年龄是:{1}'
print(a.format("rain",16))
#如果使用数字作为占位符,那么参数的额输入必须按顺序
c = '名字是:{name},年龄是:{age}'
print(c.format(name="rain",age=16))
#print(c.format(rain",16)) 会出现报错
#如果使用标识符作为占位符,参数可以不按顺序输入,且必须指明参数名,否则报错
# return
名字是:rain,年龄是:16
名字是:rain,年龄是:16
如果使用数字作为占位符,那么参数的额输入必须按顺序
如果使用标识符作为占位符,参数可以不按顺序输入,但必须指明参数名,否则报错
填充和对齐
^,<,>分别是居中,左对齐,右对齐,后面带宽度。
:冒号后面带填充的字符,只能是一个字符,默认空格。
print("{:*^8}".format("rain"))
print("{:*<8}".format("rain"))
print("{:*>8}".format("rain"))
print("{:^8}".format("rain"))
print('名字是:{0},年龄是:{1:*^4}'.format("rain",16))
print('名字是:{name},年龄是:{age:*^4}'.format(name="rain",age=16))
"""返回结果:
**rain**
rain****
****rain
rain
名字是:rain,年龄是:*16*
名字是:rain,年龄是:*16*
"""
数字格式化
就是C语言格式化输出中的%d和%f这些符号。但是python有点不同。
可变字符串
在python中,字符串不可变,使用io.StringIO对象或array模块可以进行原地修改字符串。
import io
str = 'hello,rain'
sio = io.StringIO(str)
print(sio.getvalue())
sio.write("hi")
print(sio.getvalue())
sio.write("*")
print(sio.getvalue())
sio.seek(2)
#将指针移动到下标2,默认会从0下标开始,
# 并且下标的移动会累积,也就是说上一次write操作移动的指针,会保留至下一次write操作
sio.write(' ')
print(sio.getvalue())
"""返回结果
hello,rain
hillo,rain
hi*lo,rain
hi lo,rain
"""
转载:https://blog.csdn.net/weixin_43389063/article/details/115608278