chapter . 2.2、Python内置数据结构:字符串、字节和字节数组

字符串

有序的序列,是字符的集合

使用单引号,双引号,三引号引注的字符序列

字符串是不可变对象,我们看到的合并字符串,其实是返回一个由原来两个值复制后返回的值,会占用新的空间。

从python3起,字符串是Unicode类型

  s1 = 'string'

  s2 = '''this's a "string'''

  s3 = r"hello \n aasdasd"       :r和R表示忽略转义

  s4 = R'windows \net'

  sql = """select*from user where name='tom'"""  :三引号内可以换行

字符串元素支持下标访问

字符串中的空格也是一个字符串

扫描二维码关注公众号,回复: 2754689 查看本文章

有序,可迭代

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(  "\n".join(lst))

  '\n'.join('1','2','3')以\n分割,可以打印时使用

字符串

+ -- > str    :将两个字符串连接,返回新的字符串

字符串分割

spilt系  返回列表

split(sep=None,maxsplit=-1)  ,

  sep=None默认以空格字符串字符切割,多个空格以一个处理,\t\n\r都是空白字符。

  maxsplit表示最大切的刀数,从左到右,默认-1表示能切多少切多少。

将字符串按照分隔符分割成若干字符,返回列表,如果没有切割点,就返回整个字符串放入列表

注意转义符。以\n分割表示将内容以换行符分割。

join与split是相反的一对操作

  '\n'.join("@".join(['1','2','3']).split('@')+['4'])  :将‘1‘’2’‘3’以‘@’连接,再以’@‘分割,再和’4‘相加返回新列表,以\n分割。

rsplit   :倒切,从右至左分割,

splitlines(keepends=False)  :以\n切割,没有不切,keepends开启时保留换行符,换行符有\r,\n,\r\n等

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'\x41\x61'

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同向,否则返回空序列

猜你喜欢

转载自www.cnblogs.com/rprp789/p/9451752.html