1.python 多维列表初始化
Python的列表相比于c++,很坑爹的一点是如果访问未赋值列表单元的位置,是不能直接访问的(而c++有默认值为0),例如:
lis = list(list())
lis[1][1]
这是会报错的,会提示你out of range 了。
这时如果我们想要用lis[i][j]来添加列表元素是不行的,因此我们需要为列表赋初值(当然,仅限于已知列表尺寸的情况)
我们可以用2种方法对其进行初始化,以二维数组为例:
方法1:
lis = [[None]*m]*n
这种方法会导致该列表的每个子列表都指向相同的,也就是改了lis[i][1],lis[j][1]也会改,不推荐
方法2:
lis = [[None for i in range(m)]for j in range(n)]
这种方法不会导致上述问题,并能初始化大小为n*m的列表(注意:这里越外面的尺寸,越顶层,即代表越【靠前】的[]的最大值)。并且能够用.append()在后面加东西。
2.collections模块
collections是Python内建的一个集合模块,提供了许多有用的集合类和方法。包括以下类型的变量
['ChainMap', 'Counter', 'Mapping', 'MutableMapping', 'OrderedDict', 'UserDict', 'UserList', 'UserString', '_Link', '_OrderedDictItemsView', '_OrderedDictKeysView', '_OrderedDictValuesView', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__getattr__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_chain', '_collections_abc', '_count_elements', '_eq', '_heapq', '_iskeyword', '_itemgetter', '_nt_itemgetters', '_proxy', '_recursive_repr', '_repeat', '_starmap', '_sys', 'abc', 'defaultdict', 'deque', 'namedtuple']
常用方法有如下几种
2.1 deque :
xxx = collections.deque([iterable[, maxlen]])
高效增删改双向列表,类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
方法
append(x):添加 x 到右端。
appendleft(x):添加 x 到左端。
clear():移除所有元素,使其长度为0.
copy():创建一份浅拷贝。3.5 新版功能.
count(x):计算deque中个数等于 x 的元素。3.2 新版功能.
extend(iterable):扩展deque的右侧,通过添加iterable参数中的元素。
extendleft(iterable):扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
index(x[, start[, stop]]):返回第 x 个元素(从 start 开始计算,在 stop 之前)。返回第一个匹配,如果没找到的话,升起 ValueError 。3.5 新版功能.
insert(i, x):在位置 i 插入 x 。如果插入会导致一个限长deque超出长度 maxlen 的话,就升起一个 IndexError 。3.5 新版功能.
pop():移去并且返回一个元素,deque最右侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。
popleft():移去并且返回一个元素,deque最左侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。
remove(value):移去找到的第一个 value。 如果没有的话就升起 ValueError 。
reverse():将deque逆序排列。返回 None 。3.2 新版功能.
rotate(n=1):向右循环移动 n 步。 如果 n 是负数,就向左循环。如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。
Deque对象同样提供了一个只读属性:
maxlen:Deque的最大尺寸,如果没有限定的话就是 None 。
2.2 defaultdict :
需要from collections import defaultdict:或import collections,调用时用collections.defaultdict。
作用:当使用dic[key]时,如果没有需要的key,传统dict会报错,而defaultdict不会,他会给出一个默认值作为值,而这个默认值的内容及格式可以自己设定
核心公式: dict = defaultdict(默认格式)
默认格式如:int,float,set,str,list等
3.字典及其方法
字典是能够实现搜索时间复杂度O(1)的数据类型,由键值对组成,其键具有唯一性(所以不知道有了dict还要set干金毛)
3.1初始化
dic = dict()
或
dic={}
3.2 增、改(其他放在方法里)
dic[key] = value
3.3 其他方法
删除
del dic[key] #删除指定键值对
dic.clear()#清空字典,但字典仍然保留
val
= dic.pop(key,
item
)#删除指定键值对,并且将删除
值赋给变量(也可以不接收);如果dic中没有这个key,val = item
val = dic.popitem()#随机删除一个字典中的键值对,并把值赋给val
索引或新增
temp = dic.setdefault(key,val)
如果dic中有key,temp会等于value;如果没有,temp会等于val,并且dic中会新增key:val的键值对。
而如果是 temp = dic.get(key,val),则字典内不会新增键值对,其他同上