chapter . 2.2Python内置数据结构:字符串字节和字节数组
Posted Riper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了chapter . 2.2Python内置数据结构:字符串字节和字节数组相关的知识,希望对你有一定的参考价值。
字符串
有序的序列,是字符的集合
使用单引号,双引号,三引号引注的字符序列
字符串是不可变对象,我们看到的合并字符串,其实是返回一个由原来两个值复制后返回的值,会占用新的空间。
从python3起,字符串是Unicode类型
s1 = ‘string‘
s2 = ‘‘‘this‘s a "string‘‘‘
s3 = r"hello aasdasd" :r和R表示忽略转义
s4 = R‘windows et‘
sql = """select*from user where name=‘tom‘""" :三引号内可以换行
字符串元素支持下标访问
字符串中的空格也是一个字符串
有序,可迭代
l1=list(sql),将元素迭代放入列表
l2=[sql],将整体放入列表
join
连接可迭代对象,使用给定的字符串拼接,返回字符串,可迭代对象本身元素都是字符串。
"sting".join(iterable)-->str 返回字符串
‘,‘.join(map(str,range(10))),将1-9转换为字符串,用逗号分割。
map函数,map(function,iterable,...),根据提供的函数对指定序列做映射,对可迭代对象里的每一个元素进行处理,返回一个新列表。
print(""".join(lst)) #分隔符是双引号
print( " ".join(lst))
‘ ‘.join(‘1‘,‘2‘,‘3‘)以 分割,可以打印时使用
字符串
+ -- > str :将两个字符串连接,返回新的字符串。
字符串分割
spilt系 返回列表
split(sep=None,maxsplit=-1) ,
sep=None默认以空格字符串字符切割,多个空格以一个处理, 都是空白字符。
maxsplit表示最大切的刀数,从左到右,默认-1表示能切多少切多少。
将字符串按照分隔符分割成若干字符,返回列表,如果没有切割点,就返回整个字符串放入列表
注意转义符。以 分割表示将内容以换行符分割。
join与split是相反的一对操作
‘ ‘.join("@".join([‘1‘,‘2‘,‘3‘]).split(‘@‘)+[‘4‘]) :将‘1‘’2’‘3’以‘@’连接,再以’@‘分割,再和’4‘相加返回新列表,以 分割。
rsplit :倒切,从右至左分割,
splitlines(keepends=False) :以 切割,没有不切,keepends开启时保留换行符,换行符有 , , 等
partition系 返回元组
:将字符串分割为两段,返回2段和分隔符元组,
可用来分割电话号码,文件目录。
空字符串作为分隔符会报错,必须指定分割符
rpartition:倒切,如果没有切割符,就切成整个字符串和两个空串
partition 和split 在小范围使用较为合适,一旦数据规模增大,就会造成空间占用增大,每次切割都要返回新的列表。
字符串大小写
upper :全大写
lower :全小写
判断时使用 ,处理用户输入时可用
swapcase:交互大小写
字符串排版
title() -- > str :标题单词大写,所有首字母大写
capitalize() -- >str :首个单词大写
center(width[,fillchar]) --> str :居中,使用fillchar填充,width为宽度
zfill(width) 打印宽度,居右用0填充
ljust(widht) -- > 左对齐
rjust(width) -- > 右对齐
以上全部在命令界面,在展示给客户看时,要有交互界面,或者网页上。
字符串修改
replace(old,new[,count]) -- >str
替换字符串中的字串为新子串,返回新字符串,count表示替换次数,不指定就替换全部。
如果新字符串字符包含较多字符,在字符串检测中,是一位一位后移的,不会后退,比如替换aaa中的aa,从左至右先换左边的aa,第三个a不会重新计算前边检测过的。
strip([chars]) -- > str
从两端去除指定字符集中的所有字符,如果chars没有指定,取出两端的空白字符,如果指定去除的字符串为空格,则只除去空格,不是去除所有空白字符
一旦找到字符集中没有的元素,就停止。
lstrip :从左端开始去除
rstrip :从右端开始去除
用来去除数据中的多余字符,返回新字符串.
空串为空,空白字符串为有空白的字符串
字符串查找
find(sub,[,start[,end]])可指定区间,从左至右搜寻指定子串,找到返回正索引,否则返回-1
rfind(sub,[,start[,end]])从右至左查找子串sub,返回正索引,否则返回-1
找到第一个就返回索引,如果没有就会遍历
index(sub,[,start[,end]])-->int :可指定区间,在区间内从左至右查找字串,找到返回索引,否则抛出异常ValueError
rindex(sub,[,start[,end]])-->int :可指定区间,在区间内从右至左查找字串,找到返回索引,否则抛出异常ValueError
find 和 index 都是时间复杂度为O(n),随数据规模的增大,效率下降
len(string) :返回字符串长度,字符个数
字符串判断
endwith(suffix[,start[,end]]) -- > bool :在指定区间判断字符串是否是suffix结尾,返回波尔值
startwith(prefix[,start[,end]]) -- > bool :在指定区间判断字符串是否是prefix,返回波尔值
find(‘www‘,0,3) :常用这种方式判断开头,不会遍历
可用来判断文件类型,是否以.txt.jpg.pdf等结尾,左闭右开区间
isalnum() --> bool 是否字母数字组成
isalpha() 是否是字母,其他都不行
isdecimal() 是否只包含十进制数字
isdigit() 是否全部数字0~9
isidentifier() 是否字母下划线开头,其他都是字母,数字,下划线,判断标识符
islower
isupper
isspace()是否只包含空白字符
字符串格式化
join拼接要使用分隔符,且要求拼接对象可迭代
+要求转换非字符串格式为字符串格式
printf-style formatting 来自C语言的printf函数
占位符用%表示
%03d 表示打印三个位置,不够前边补零,d表示数字格式,s表示字符串格式
%3.2f 3表示宽度,位数大于宽度时,显示位数,数字大小不能改变,.2表示精度,小数点后两位,会四舍五入
%#x %#X 16进制,x表示小写,X表示大写
‘%-05d’ % 10 占位5个宽,右侧补零,如果没有小数点,就补空格,没有负号,就左侧补零
可以查手册,关键字str method
format函数格式化字符串语法
‘{}{xxx}‘.format(*args,*kwargs)-->str
args位置参数,是一个元组
kwargs是关键字参数,是字典
花括号占位符,{n}位置参数表示位置参数索引为n的值
{xxx}表示在关键字参数中搜索名称一致的,{{}}表示花括号
位置参数
’{}:{}‘.format(‘192.168.1.100‘,8888)按照位置对应
‘{1}{0}‘.format(‘a‘,‘b‘)输出为‘ba’
访问元素 ‘{0[0]}.{0[1]}‘.format((‘magedu‘,‘com‘))输出为magedu.com
访问对象属性
from collections import namedtuple
Point=namedtuple(‘Point‘,‘x y‘)
P=Point(4,5)
‘{{{0.x},{0.y}}}‘.format(P)
输出{4,5}
对齐
‘{0}*{1}={2:<02}‘.format(3,2,2*3) 打印3*2=6,输出后左移补零输出为‘3*2=60’
将0换为#也可以‘{0}*{1}={2:#<2}‘.format(3,2,2*3) ,输出’3*2=6#‘
进制
"int{0:d};hex{0:x};oct{0:#o};bin{0:#b}".format(42) 输出为 ‘int42;hex2a;oct0o52;bin0b101010‘
octets=[192,168,0,1]
‘{:02X}{:02X}{:02X}{:02X}‘.format(*octets)
输出为’C0A80001‘
浮点数
print(‘{:g}‘.format(3**0.5)) 精度g,还可以为f 输出 1.73205
print(‘{:3.3%}‘.format(1/3))宽度为三,小数点后三位 输出 33.333%
宽度不能改变数值的大小
reversed(),从列表中倒着一个个的取出数据,列表不发生变化,.reverse()列表会发生变化
字节和字节数组
bytes :字节序列,不可变
bytearray :字节数组,可变
字符串与bytes :字符串是字符组成的有序序列,字符可以使用编码理解
bytes是字节组成的不可变序列
bytearray是字节组成的可变序列
编码与解码
字符串按照不同的字符集编码encode返回字节序列bytes:
a.encode(encoding=‘utf-8‘, errors=‘strict‘) -->bytes
字节序列按照不同的字符集解码decode返回字符串
bytes.decode(encoding=‘utf-8‘,errors=‘strict‘) -->str
bytearray.decode(encoding=‘utf-8‘,error=‘strict‘) -->str
ASCII:美国信息交换标准代码
基于拉丁字母的一种单字节编码系统
一个字节8位,共256种变化,从0-255,ASCII码的0-127是常用
十六进制hex表示是,30是数字0,40是A的前一位,60是a的前一位
bytes定义
bytes()
bytes(int) 指定字节的bytes,被0填充
bytes(iterable_of_ints) -->bytes[0,255]的int组成的可迭代对象,超界报错bytes must be in range(0, 256)左闭右开
bytes(string,encodeing[,errors]) -->bytes 等价于string.encode() eg: bytes(‘a‘,encoding=‘utf-8‘),输出为b‘a‘
bytes(bytes_or_buffer) ->immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象
使用b前缀定义
只允许基本ASCII使用字符形式b‘ac99‘
使用16进制表示b‘x41x61‘
bytes的操作和str类似
操作字节前边一定要加b
replace,find,
bytes.fromhex(string) :string必须是两个字符的十六进制的数,空格忽略
‘abc‘.encode().hex() 返回16进制表示的字符串,
索引b‘abcdef‘[2] 返回字节对应的数,int类型
bytearray
bytearray()空bytearray
bytearray(int) 指定字节的bytes,被0填充
bytearray(iterable_of_ints) -->bytes[0,255]的int组成的可迭代对象,超界报错bytes must be in range(0, 256)左闭右开
bytearray(string,encoding[,errors]) 返回可变对象
注意,b前缀定义的是bytes类型
bytearray操作
replace,find
bytearray.fromhex(string) :string必须是两个字符的十六进制的数,空格忽略
bytearray(‘abc‘.encode()).hex 返回16进制表示的字符串
索引bytearray(b‘abcdef‘)[2] 返回字节对应的数,int类型
append 尾部追加
insert(index,int) 在指定索引位置插入元素
extend(iterable_of_ints) 将一个可迭代的整数集合追加到当前bytearray
pop(index=-1) 弹出元素,默认尾部
remove(value) 找到第一个value移除,找不到抛异常
clear() 清空
reverse() 翻转,就地修改
int.from_bytes(bytes,byteorder)
将字节数组表示成整数
int.to_bytes(length,byteorder)
将一个整数表达成指定长度的字节数组
i=int.from_bytes(b‘abc‘,‘big‘)
print(i,hex(i)) #6382179 0x616263
print(i.to_bytes(3,‘big‘)) #b‘abc‘
切片
线性结构(可迭代,可用len取长度,可通过下标访问),就可以切片
通过索引区间访问线性结构的一段数据
sequence[start,stop]表示返回[start,stop]区间的子序列
[:] 表示从头到尾,等效于copy()
步长切片
[start:stop:step]
step步长,可以正负整数,默认1
step要和start:stop同向,否则返回空序列
以上是关于chapter . 2.2Python内置数据结构:字符串字节和字节数组的主要内容,如果未能解决你的问题,请参考以下文章
Python编程:从入门到实践chapter2 变量和简单数据类型