字符串

不同的字符串所占的字节数不同,所以要计算字符串的长度,就需要了解各字符所占的字节数。

python中字符串使用的是unicode字符集,数字、英文、小数点、下划线、空格占1个字节;汉字在GBK/GB2312编码中占2个字节,在UTF-8/unicode编码中占用3个字节(或者4个字节)。

一个字节有8个位组成,所以一个字节有2^8=256个状态。

使用内置函数ord()可以把字符串转换成对应的unicode码,使用内置函数chr()可以把十进制数字转换成对应的字符。

python 字符串 字节数 python字符串占几个字节_ico

 我们用单引号、双引号、三引号创建字符串,三引号可保留字符串原始格式

python 字符串 字节数 python字符串占几个字节_python 字符串 字节数_02

 字符串的替换

字符串是不可以改变的,所谓的替换只是让变量指向了创建的新字符串

python 字符串 字节数 python字符串占几个字节_python 字符串 字节数_03


str() 实现数字转型字符串




python 字符串 字节数 python字符串占几个字节_字符串_04


使用[]提取字符


字符串的本质就是字符序列,我们可以通过在字符串后面添加 [], 在[] 里面指定偏移量,可以提取该位置的单个字符。



python 字符串 字节数 python字符串占几个字节_python 字符串 字节数_05


字符串切片slice操作


切片 slice 操作可以让我们快速的提取子字符串。


标准格式为: [起始偏移量start:终止偏移量end:步长step],包头不包尾。



python 字符串 字节数 python字符串占几个字节_python_06


split()分割和join()合并


split() 可以基于指定分隔符将字符串分隔成多个子字符串 ( 存储到列表中) 。如果不指定分隔符,则默认使用空白字符 ( 换行符 / 空格 / 制表符) 。



python 字符串 字节数 python字符串占几个字节_python 字符串 字节数_07


join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来。

python 字符串 字节数 python字符串占几个字节_ico_08


使用字符串拼接符 + ,会生成新的字符串对象,因此不推荐使用 + 来拼接字符串。推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。


import time
time1 =time.time()
#第一个time是模块,第二个time是time函数
a = ""
for i in range(1000000):
    a += "sxt"
time2 = time.time()
print("运算时间:"+ str(time2-time1))

time3 = time.time()
li = []
for i in range(1000000):
    li.append("sxt")
a = "".join(li)
time4 = time.time()
print("运算时间:"+ str(time4-time3))


运算结果:

D:\python\python.exe D:/pythoncode/MyThreadDemo/my01.py
运算时间:0.6615064144134521
运算时间:0.14711618423461914

去除首尾信息


通过 strip() 去除字符串首尾指定信息。通过 lstrip() 去除字符串左边指定信息,rstrip() 去除字符串右边指定信息。


a = "*s*x*t*".strip("*")
b = "*s*x*t*".lstrip("*")
c = "*s*x*t*".rstrip("*")
print(a)
print(b)
print(c)

结果:

s*x*t
s*x*t*
*s*x*t


字符串的格式化


format() 基本用法:基本语法是通过 {} 和 : 来代替以前的 % 。 format() 函数可以接受不限个数的参数,位置可以不按顺序。


b = "名字是:{},年龄是:{}"
a = b.format("小涛",28)
print(a)

D:\python\python.exe D:/pythoncode/MyThreadDemo/my01.py
名字是:小涛,年龄是:28


可变字符串


1、Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。


2、需要原地修改字符串,可以使用io.StringIO 对象或 array 模块


s = "hello.sxt"
sio = io.StringIO(s) # sio就是可变字符串
print(sio)
print(sio.getvalue())
sio.seek(3)
sio.write("***")
print(sio.getvalue())

执行结果:

<_io.StringIO object at 0x0000019CE94F3E20>
hello.sxt
hel***sxt