数据结构
列表
特点:有序、可变、可重复、连续内存空间
链表linked list:有序、可变、可重复、内存空间不连续
队列quene:先进先出
栈stack:后进先出
定义方法
l=list()
l=[]
l=[1,2,3]
l=list(可迭代对象)
索引
正索引从左至右0开始
负索引从右至左-1开始
索引超界报错IndexError
list[索引]
list[index]=value 通过索引修改列表元素值
查询
- 索引
list.index(value,[start,[stop]])
从左至右查到第一个匹配的值就返回
无匹配值报错ValueError - count
list.count(value)
返回列表中匹配值的个数 - 时间复杂度
index和count都是O(n),需要对列表进行遍历操作 - len
返回列表元素的个数
增删
list.append(value)
增加单个元素
就地修改 O(1)
list.insert(index,value)
通过索引插入值
就地修改 O(n)
超越上界尾部追加
超越下界头部追加
list.extend(iteratable)
追加一个可迭代对象的内部所有元素
就地修改
+
将两个列表连接起来返回一个新的列表
*
将一个列表的值重复n次返回一个新的列表
list.remove(value)
删除第一个匹配到的值
就地修改
list.pop([index])
弹出一个元素,默认弹出尾部元素
list.clear()
清除所有元素变成空列表
就地修改
list.reverse()
将元素顺序反转
就地修改
list.sort(key=None,reverse=False)
对列表进行排序,默认升序
reverse=True,降序
key=type,指定按转换成对应类型后排序
in
value in list
返回Bool值
list1=list.copy()
列表复制,引用类型为复制的内存地址
深拷贝
import copy
list1=copy.deepcopy(list)
随机数
random模块
import random
rando.randint(a,b)随机返回一个整数
random.range([start], stop,[step]) 从range对象中随机返回一个元素值
random.choice(seq) 从非空序列中随机返回一个元素值
random.shuffle(list)洗牌,打乱列表排序
random.sample(population,n)返回随机n个不同的元素,返回一个新的列表
元祖
t=()
定义一个元素的列表 t=(1,)
与列表相比 不可变 无法增删改
bytes
bytes不可变字节序列
bytearray可变字节数组
使用b前缀定义,定义出的是bytes
只允许基本ASCII使用字符形式b’str’
使用16进制表示b’\xn\xn’
str.(encode) -> bytes
bytes.(decode) ->str
bytes(str,encoding=‘utf-8’)将字符串转为bytes,编码格式为’utf-8’
bytes(iterable of ints)->bytes[0-255]的int组成的可迭代对象
bytes(int)定义长度 用空字节初始化的参数给定大小的字节对象
b’abc’.replace(b’a’,b’c’)字节替换,返回新的
b’abc’.find(b’a’)
‘abc’.encode().hex()返回16进制表示的字符串
i=int.from_bytes(b’abc’,‘big’)将bytes内容16进制作为一个整体转换为int十进制
i.to_bytes(n,‘big’)再转为16进制字节显示,n为宽度,宽度不满左侧填充\x00
bytearray(str,encoding=‘utf-8’)将字符串转为bytearray,编码格式为’utf-8’
bytearray(bytes or buffer)复制出一个新的可变的bytearray对象
bytearray(b’abc’)[2]返回该字节对应的数 int类型
replace返回新值,append,insert,extend,pop,remove,clear,reverse就地修改,值为0x61=a,97=a,若使用int类型,值在[0,255]
切片
[起始索引:终止索引:步长]前包后不包,截取字段后返回新值,不对数据本身做修改
[:]全部 省略等于缺醒值 开始到最后 步长1
索引可超界
*[:]=iterable 将切片选中字段替换成可迭代对象值
切片赋值可跨类型,不改变类型本身
浅拷贝
字符串
字符串是不可变对象 字面常量
Python3起 字符串就是unicode字符
R/r‘string’ 取消字符串中的转义
‘str’.join(string) str加入字符串中作间隔符
map(self, /, *args, **kwargs)
‘str’.split(’ 分隔符’,maxsplit=n)
‘str’.split(None)默认以空白字符切割
多个空白字符按一个处理
‘str’.split(‘分隔符’,n) 按分隔符切割及切割次数,默认-1无限切
‘str’.split(sep=‘str’)按给定的字符切割
‘str’.rsplit(‘分隔符’,n) 从右侧切割
splitlines()按换行符切割/按行切割\r\n视为一个换行符
splitlines(True)切割后保留换行符
split切割返回列表
splite匹配不到分隔符不切割,partition匹配不到分隔符会切成3段,另两段是空字符串’’
partition必须给分隔符
partition(‘str’) 按分隔符切割成3段 中间是分割符
返回元祖
rpartition右侧开始切割
upper()全大写
lower()全小写
swapcase()交互大小写
title()标题的每个单词都大写
capitalize()首个单词大写
center(打印宽度,【填充字符】)
zfill(打印宽度)居右填充0
左右对齐填充
ljust(打印宽度,【填充字符】)
rjust(打印宽度,【填充字符】)
replace(‘str’,‘str’,[次数]) 替换 生成新字符串
strip()默认去除两端空白字符 返回新字符串
lstrip() rstrip() 左右去除空白字符
strip(str) 左右能匹配到的都移除,停止于匹配不到的第一个字符
find(sub[,start[,end]])从左至右查找 前包后不包
rfind从右至左查找
返回匹配字符串的第一个字符之索引
找不到返回-1
index找不到会报错
count(‘str’)查看匹配次数
startswith(suffix,[start[end]])
endswith(suffix,[start[end]])
判断是否以字符串开头结尾 返回bool值 前包后不包
字符串格式化
支持关键字传参
{}占位符
{{}}表示花括号本身
‘{m[n]}’.format([a,b,c]) 可以取对应的列表中的索引
‘{m.n}’.format(m) 可以取namedtuple中的对应属性值
import datetime
d=datetime.datetime.now()
datetime.datetime(2019, 3, 29, 20, 40, 8, 129085)
‘{}’.format(d)
‘2019-03-29 20:40:08.129085’
‘{:%*}’ 筛选出对应属性字段显示,可用-连接格式化显示
%Y年 %m月 %d日期 %H小时 %M分钟 %S秒
‘{:</>n}’.format() 宽度n 左/右对齐
‘{:填充符^n}’.format() 宽度n 居中对齐 空余地方使用填充符填充
‘{:m.n%}’.format() 转换成百分比显示 宽度m 精度n
字符串判断is系列
str.isalnum()是否是字母和数字组成
str.isalpha()是否是字母
str.isdecimal()是否只包含十进制数字
str.isdigit()是否全部数字(0~9)
str.isidentifier()是不是字母和下划线开头,其他都是字母、数字、下划线(检查是否符合标识符定义规则)
str.islower()是否都是小写
str.isupper()是否全部大写
isspace()是否只包含空白字符