Python数据结构-字符串、bytes(切片)

1、类型

字符串是不可变的对象。(可变的是重新拼接组成的新的字符串)

一个个字符组成的有序的序列,是字符的集合。

使用单双号、双引号、三引号引住的字符序列。描述字符串,没有放字符的为空字符串,长度为0,等同于None。

Python3中字符串就是unicode----8类型的。

生成新的值。Utf-8。

2、字符串定义初始化

 s2="string"   s3='''this is a"string"'''    s5='c:\windows\nt’  打印带出斜杠的。

3、字符串元素访问-----下标

1)字符串支持使用索引访问。  sql[3].

 

4、join 

把可迭代对象的一个个字符串连接起来。

可迭代对象本身元素都是字符串。  “string”.join(iterbale)->str

返回一个新的字符串。      '---'.join(map(str,lst))

5、map

map(str.lst)转换为字符串的方式。按照什么格式拼接字符串。

 

6、字符串+连接

1)     + -》str。将两个字符串拼接在一起,返回一个新的字符串。‘a’*2

7、字符串的分割。

分为两类。

1)Split() 没有指定,尽可能多的空白字符作为一个空白分隔符。’’+

Split(sep=none,maxsplit=1)。不指定分隔符的时候,默认以空白字符进行分割。    

"a   b\tc".split()        从左至右

p sep 指定分割字符串,缺省的情况下空白字符串作为分隔符

p maxsplit 指定分割的次数,-1 表示遍历整个字符串.

切的函数都是一刀两断。      "a,b,c,d,e".split(',',2)         不支持正则表达式。

2)rsplit(sep=None, maxsplit=-1) -> list of strings

 *从右向左

*sep 指定分割字符串,缺省的情况下空白字符串作为分隔符

* maxsplit 指定分割的次数,-1 表示遍历整个字符串.

3)splitlines([keepends]) -> list of strings

* 按照行来切分字符串

* keepends 指的是是否保留行分隔符

* 行分隔符包括\n、\r\n、\r等

()括号里面的添加True,切割后显示分隔符。False不显示分隔符。

4)         Partition(seq)->(head,seq,tail)切割。切割完成后返回的是三元组。

从左至右,遇到分隔符就把分隔符分割成两部分,返回头、分隔符、尾三部分的三元组。如果没找到分隔符,就返回头,2个空元素的三元组。

Seq必须界定分隔符,必须制定。

5)rpartition(seq)->(head,seq,tail),从右至左,到分隔符就把分隔符分割成两部分,返回头、分隔符、尾三部分的三元组。如果没找到分隔符,就返回头,2个空元素的三元组。

8、字符串大小写

1)upper全是大写。    lower全是小写。 swapcase()交互式大小写。if a.lower()='abc':

   

9、字符串排版

title() 标题的每个字母首字母都大写。

capitalize()首个单词大写。

center(width[,fillchar])  ->str    width打印的宽度,,,fillchar填充的字符。

zfill(didth)   width打印宽度,居右。

 

10、字符串修改

1)replace(old,new[,count])---->str**

字符串中查找到匹配替换为新字串,返回新的字符串。

count表示替换几次,不指定就是全部替换。

2)Strip([chars])->str

把两头的符合要求的字符串全部去掉。char作为集合,去掉字符集。

如果char没有指定字符,那么就去掉两头的空白字符。

s='very very very good'.....s.strip(' very')

lstrip([chars]) -> str

 从左开始

 rstrip([chars]) -> str

 从右开始

11、find();

找得到返回的是索引,未找到返回的是-1.

 find(sub[, start[, end]]) -> int    s.find('very')

在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到返回-1

 rfind(sub[, start[, end]]) -> int

在指定的区间[start, end),从右至左,查找子串sub。找到返回索引,没找到返回-1

 

12、字符串查找

index(sub[, start[, end]]) -> int

在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError

 rindex(sub[, start[, end]]) -> int

 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError

13、字符串查找

1)时间复杂度,index和count方法都是O(n)。

2)随着列表数据规模的增大,而效率下降。

3)len(string)返回字符串的长度,即字符串的个数。

14、count(sub[, start[, end]]) -> int

在指定的区间[start, end),从左至右,统计子串sub出现的次数。。。s.count('very')

4)count(sub[])->int.

15、字符串判断:

endswith(suffix[, start[, end]]) -> bool

在指定的区间[start, end),字符串是否是suffix结尾

startswith(prefix[, start[, end]]) -> bool

在指定的区间[start, end),字符串是否是prefix开头

16、字符串判断 is系列

isalnum() -> bool 是否是字母和数字组成    "abc123".isalnum()

isalpha() 是否是字母

isdecimal() 是否只包含十进制数字

isdigit() 是否全部数字(0~9)

isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线

islower() 是否都是小写

isupper() 是否全部大写

isspace() 是否只包含空白字符       返回的都是bool值。

Sections(有序的)(常见的面试是排序方法是冒泡法)。

17、字符串格式化

字符串格式化是一种拼接字符串输出样式的手段,更灵活方便。

1)     join拼接只能使用 分隔符,且要求被拼接的是可迭代的对象。

2)     +拼接字符串比较方便,但是字符串需要先转换为字符串才能拼接。

printf-style formatting,是来自于c语言风格的print输出。

3)格式要求:占位符。。使用%和格式字符组成,例如%s,%d。

S调用str,   r调用repr().所有对象都可以被这两个转换。‘a’使用ascii。%

占位符中还可以插入修饰字符,例如%03d表示打印3个位置。不够前面补0.

format % values.格式字符串和被格式化的值之间使用%分隔。

Values只能是一个对象,或者是一个和格式字符串数目相等的元组,或一个字典。

用法:"i am %01s"  %(3,)  

'i like %s.'%'Python'

4)'%3.2f%% , 0x%x, 0X%02X' % (89.7654, 10, 15)   

可以是 元组,可以是字典。

0x    0X只是提示符。

18、字符串格式化

format函数格式。

“{}{***}”。format(args,kwargs)。

Args是位置参数,是一个元组。

Kwargs关键字参数,是一个个字典。   {}花括号代表占位符。{{}}表示打印花括号。

{}表示按照顺序匹配位置参数,{n}标示取位置参数索引为n的值。

{****}表示在关键字参数中搜索名称一致的。

19、字符串格式化

p 位置参数

"{}:{}".format('192.168.1.100',8888),这就是按照位置顺序用位置参数替换前面的格式字符串的占位符中

p 关键字参数或命名参数

"{server} {1}:{0}".format(8888, '192.168.1.100', server='Web Server Info : ') ,位置参数按照序号匹配,

关键字参数按照名词匹配

p 访问元素

"{0[0]}.{0[1]}".format(('magedu','com'))

p 对象属性访问

from collections import namedtuple

Point = namedtuple('Point','x y')

p = Point(4,5)

"{{{0.x},{0.y}}}".format(p)

2)     "{:^10x}".format(97)居中对齐。'{0}*{1}={2:<2}'.format(3,2,2*3)

3)     进制。"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)

 

41    1

61    a  97

 

权重。

显示时间的。

 

有效数字。。()

20、bytes、bytearray

字符串是字符组成的有序序列,字符可以使用编码来理解。

1)bytes是不可变的字节,是字节组成的有序的不可变序列。

2)bytearray 是可变的字节,是字节组成的有序的可变序列。

3)编码与解码

字符串按照不同的字符集编码encode返回字节序列bytes。

encode(encoding=’utf-8’ ,errors=’strict’)->bytes 

b'abcdef'.replace(b'f',b'k')

字节序列按照不同的字符集解码decode返回字符串

bytes.decode(encoding="utf-8", errors="strict") -> str

4)     bytes定义

Bytes() 空的bytes。 Bytes(int)指定字节的bytes,被0填充。

Bytes(iterable_of_ints)->[0,255]的internet组成的可迭代的对象。

Bytes(string,encoding[,errors])->bytes等价于string。Encode()

Bytes(bytes_or_buffer)->immutable cpoy of bytes_or_buffer从一个字节序列或者buffer复制出一个新的不可变的bytes对象。

使用b前缀定义:

只允许基本ASCII使用字符形式b’abc9’

使用16进制表示b“、x41、x61”

 

5)ASCII表。ASCII(American StandardCode for InformationInterchange,美国信息交换

标准代码)是基于拉丁字母的一套单字节编码系统

6)     bytes操作

和str类型类似,都是不可变类型,所以方法都一样,只不过bytes输入是bytes,输出也是bytes。

类方法bytes。Formhex(string)

String必须是2个字符的16进制的形式,bytes.fromhex('6161 09 6a 6b00')

Hex()返回十六进制的字符串。

'abc'.encode().hex()

索引 b‘abcdef’[2]

7)         bytearray定义

定义:bytearray()空的bytearray

Bytearray(int)指的是字节的bytearray,被0填充。

Bytearray(iterable_of_ints)->bytearray[0,255]的int组成的可迭代对象。

Bytearray(string,encoding[,errors])->bytearry近似string。Encode()不过返回可变对象,

Bytearray(bytes_or_buffer)从一个字节序列或者buffer复制出一个新的改变的对象。

B前缀的定义的类型是bytes类型。

8)         byearray操作

和bytes类型方法相同。

Bytearray(b’abcdef’).replace(b’f’,b’k’)

Bytearray(b’abc’).find(b’b’)

类方法bytearray.formhex(string)

String必须是2个字符的16进制的形式。

Bytearray。Formhex(‘6162 09 60 6b00’)

hex()

返回16进制表示的字符串。

Bytearray(‘abc’.enconde())。Hex()

索引

Bytearray(b’abcdef’)[2]返回该字节对应的数,int类型。

9)         bytearray操作。

Append(int)尾部追加一个元素。

Insert(index,int)在指定索引位置插入元素。

Extend(iterable_of_ints)将一个可迭代对象的整数集合追加到当前bytearray

Pop(index=-1)在指定索引上移除元素,默认从尾部移除。

Remove(value)找到第一个value移除,找不到抛出异常。

Clear()清空

Reverse()翻转bytearray,就地修改。

10)提到字符串就得有编码的概念。

11)字节

12)字节0-255之间。

13)可以索引的数据结构,列表,tuple   str   bytearray.

21、切片

1)线性结构。  

可迭代。。。for。。。In。。  

len()可以获取长度。

通过下标可以访问。可以切片。

2)学过的线性结构:

列表、元组、字符串、bytes  bytearray.

3)切片:

通过索引区间访问线性结构的一段数据。

Sequnence[start:stop]表示返回[start,stop]区间的字序列。

支持负索引。

Start为0,可以省略

Stop为末尾,可以省略。

超过上界(右边界),就取到末尾;超过下界(左边界),取到开头。

Start一定要在stop的左边。

[:]...表示从头至尾,全部元素被取出,等效于copy()方法。

生产新的拷贝。

 

练习方法:'www.magedu.com'[:10]   ----'www.magedu'
bytearray(b'www.magedu.com')[-4:10]     ---  bytearray(b'')
'www.magedu.com'[:]  -------'www.magedu.com'
tuple('www.magedu.com')[-10:10]  -------('m', 'a', 'g', 'e', 'd', 'u')
list('www.magedu.com')[-10:-4] -------  ['m', 'a', 'g', 'e', 'd', 'u']

4)     切片

步长切片

[start:stop:step]

Step为步长,可以正负整数,默认是1;

Step要和start;stop同向,否则返回空序列。

练的例题:'www.magedu.com'[4:10:2]

            'mgd'
 
list('www.magedu.com')[-4:-10:-2]
['.', 'd', 'g']

 

posted @ 2018-11-12 15:55  Python爱好者666  阅读(11902)  评论(0编辑  收藏  举报