字符串
- 一个个字符组成的有序序列
- 字符的集合 使用单引号,双引号,三引号引住的字符序列
- 字符串是不可变对象
- Python3起 字符串就是Unicode类型
字符串定义 初始化
s1 = 'string'
s2 = "string"
s3 = """ this is a "String" """
s4 = 'hello \n magedu.com' #\n代表换行
s5 = r 'hello \n magedu.com' #\r 表示转义 让\n就表示为字符串
字符串元素访问–下标(索引)
字符串支持使用索引 因为是有序序列
sql = “dasfsd dsda fafsf”
sql[4] #字符串 's'
字符串还可以迭代
sql = list(sql)
join连接 (拉链)
字符串分割
1.分割字符串方法有两种
split系:将字符串按照分隔符分割成若干字符串,并返回新列表,只会往前切 不会往后 索引超界不报错
ls = 'a b dd d '
split() # 默认按照尽量长的空格进行分割 返回['a' ,'b', 'dd', 'd']
split( ' ') # 按照一个空白切除 不保留切割符
- partition系:将字符串按照字符串分割成2段,返回2段和分割符的元组
从右到左,遇到分隔符就把字符串分割成两部分,返回头,分隔符,尾三部分的三元组如果没有找到分割符,就返回头,2个空元素的三元组
字符串大小写
upper() # 全大写
lower() # 全小写
swapcase() #交换大小写
字符串修改*
-
replace(old, new,[,count]) -->str
字符串中找到匹配替换为新的子串,返回新字符串 count表示替换几次,不指定就是全部替换 ‘heLLLo world ’.replace('l', 'p') # 把L替换为p 全部换掉 ‘heLLLLo world ’.replace('l', 'p', 2) # 把L替换为p 替换两个
-
strip([chars])–> str
从字符串两端去除指定的字符集chars中的所有字符
如果chars没有指定,去除两端的空白字符
s = " Hello Python \n \t"
s.strip() #不指定 返回”Hello Python“ 去掉了两头的空格
s.strip(' ' ) #指定了去掉空格‘\r \n \t Hello Python \n \t‘ (\n \t不算空格)
s.strip(' Hell ' ) #返回”o Python \n \t“ 去掉了指定字符
字符串查找
- 时间复杂度
index和count方法都是O(n)
随着列表数据规模的增大,而效率下降 - len(string)
返回字符串的长度,即字符的个数 - index(sub[,start[,end]])–>int
在指定的区间[start,end],从左到右。查找子串sub,找到就返回索引,没找到返回ValueError
法跟find一样 - find(sub[,start[,end]])–>int
在指定的区间[start,end],从左到右。查找子串sub,找到就返回索引,没找到返回-1 - rfind(sub[,start[,end]])–>int
在指定的区间[start,end],从右到左。查找子串sub,找到就返回索引,没找到返回-1
s = 'I am very very very sorry'
s.find('very') #返回【2】 very的索引
s. find('very',5) #返回【5】 从索引5开始找
#只能正这找 反着找要指定负索引
字符串判断*
- 时间复杂度是O(1) 可以常用
字符串判断is系列
字符串格式化
- 字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便
- join拼接只能使用字符串分隔符,且要求拼接的是可迭代对象且某元素是字符串
- +号拼接字符串还算方便,但是非字符串需要先转换为字符串才能拼接
- 在2.5版本之前,只能使用printf style风格的print输出
- printf-style formatting,来自于C语言的print函数
- 格式要求
- 占位符:使用%和格式字符组成,例如%s %d等
s调用str(),r会调用repr()/所有对象都可以被这两个转换 - 占位符中还可以插入修饰符,列如%3d表示打印3个位置,不够前面补零
- format % values,格式字符串和被格式的值之间使用%分割
- values只能是一个对象,或是一个与格式字符串占位符数目相等的元组,或一个字典
切片
- 通过索引区间访问线性结构的一段数据
- sequence[start:stop] 表示返回(sart,stop)区间的子序列
- 支持负索引
- start为0,可以省略
- stop为末尾。可以省略
- 超过上界,就去到末尾;超过下界,就去到开头
- start 一定要在stop左边
- [ : ]表示从头到尾,全部元素被取出,等效copy()方法
步长切片
- 【start:stop:stpe】
- step为步长 可以正,负整数,默认是1
- step要和start:stop同向否则返回空序列
切片赋值
- 切片操作写在等号左边
- 被插入值是可迭代对象写在右边
a = list(range(5))
a[1:2] = 10 # 这是错误的 右边必须为可迭代对象
a [1:2] = {10,11} # 将索引为1到2 的替换成10 11
bytes ,bytearray
- 所有数据都是用2进制存储在计算机中
python3引入两个新类型
bytes:不可变的字节序列
- 字符串与bytes
- 字符串是字符组成的有序序列,字符可以使用编码来理解
- bytes是字节组成的有序的不可变的序列
- bytearray是字节组成的有序的可变序列
bytes定义
- bytes()空的bytes
- bytes(int) 指定字节的bytes,被0填充
- bytes(iterable-of_ints)->bytes[0,255]的int组合成的可迭代对象
- bytes(string,encoding[,errors])->bytes 等价于string。encode()
- bytes(bytes_or_buffer)->immutable copy of bytes_or_buffer从一个字节序列或者buffer复制出一个新的不可变的bytes对象
- 使用b前缀定义
- 只允许基本 ASCII使用字符式为 b’abc9’
- 使用16进制表示 b"\x41\x61"
- 所有操作:b"abcdef"[2] 返回该字节对应的数,int类型
bytearray定义
- bytearray()空的bytearray
- bytearray(int) 指定字节的bytearray,被0填充
- bytearray(iterable-of_ints)->bytearray[0,255]的int组合成的可迭代对象
- bytearray(string,encoding[,errors])->bytearray 等价于string。encode(),返回的是可变对象
- bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象
- 主要,b前缀定义的类型是bytes。
- bytearray前缀就是bytearray()
int 和bytes
-
int.from_bytes(bytes,byteorder)
-
将一个字节数组表示成整数
-
int.to_bytes(length,byteorder)
-
byteorder字节序:将一个整数表达成一个指定长度的字节数组
i = int.from_bytes(b'abc',,"big") #大头
print(i,hex(i)) 返回# 6382179 0x61663
print(i.to_bytes(3,'big')) # 返回b"adc"
- 编码与解码
- 字符串按照不同的字符集编码encode返回字节序列bytes
- encode(encodin = utf-8,errors = ‘stric’)–bytes
- 字节序列按照不同的字符集解码decode返回字符串
- bytes。decode(encoding = ‘utf-8’,errors= ‘strict’)–str
- bytes(string,encoding[,errors])->bytes 等价于string。encode(),不过返回的是可变对象
bytearray 字节数组 可变