飞道的博客

Python的学习-3-字符串及其常见操作

220人阅读  评论(0)

字符串

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. 可以用+将多个字符串拼接起来。
    (1) 如果+两边都是字符串,则拼接
    (2) 如果+两边都是数字,计算
    (3) 如果+两边类型不同,抛出异常
  2. 可以将多个字面字符串放在一起实现拼接
b="rain""cloud"
print(b)
  1. 使用*可以实现字符串复制
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“,则会当作最后一个下标。

两个字符串操作的小例子

是自己写的小例子。

  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="")
  1. 将 "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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场