第24篇 collections模块 双端队列 命名元组 有序字典 默认字典
Posted cavalier-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第24篇 collections模块 双端队列 命名元组 有序字典 默认字典相关的知识,希望对你有一定的参考价值。
sys模块是指与python解释器沟通的模块
os模块是与操作系统交互的模块
python的工作路径相关的操作
os.getcwd 获取当前的动作目录 get current working dir
os.chdir 更改工作路径 change dir
用递归的方法计算5的阶乘
递归的原理 先递 后归
def fn(n):
if n == 1:return 1
else:
return fn(n-1)*n
print(fn(5))
return 1*2*3*4*5
def fn(5): if 5 == 1:return 1 else: return fn(4)*5 def fn(4): if 4 == 1:return 1 else: return fn(3)*4 def fn(3): if 3 == 1:return 1 else: return fn(2)*3 def fn(2): if 2 == 1:return 1 else: return fn(1)*2 def fn(1): if 1 == 1:return 1 else: return fn(n-1)*n
有序字典
orderedDict
from collections import OrderedDict dd = OrderedDict([(‘a‘,1),(‘k1‘,‘v1‘),(‘k2‘,‘abc‘)]) print(dd) for k in dd: print(k,dd[k]) dd[‘k3‘] = ‘alex‘ print(dd) OrderedDict([(‘a‘, 1), (‘k1‘, ‘v1‘), (‘k2‘, ‘abc‘)]) a 1 k1 v1 k2 abc OrderedDict([(‘a‘, 1), (‘k1‘, ‘v1‘), (‘k2‘, ‘abc‘), (‘k3‘, ‘alex‘)])
li = [11,22,33,44,55,66,77,88,99] my_dict = {} for value in li: if value > 66: if ‘k1‘ in my_dict: my_dict[‘k1‘].append(value) else: my_dict[‘k1‘] = [value] if value > 66: if ‘k2‘ in my_dict: my_dict[‘k2‘].append(value) else: my_dict[‘k2‘] = [value] print(my_dict) {‘k1‘: [77, 88, 99], ‘k2‘: [77, 88, 99]}
a = list() print(a) [] a = dict() print(a) {}
默认字典
from collections import defaultdict d = defaultdict(list)#传入的参数是list list()就会得到一个空列表 print(d) d[‘a‘] print(d) defaultdict(<class ‘list‘>, {}) defaultdict(<class ‘list‘>, {‘a‘: []})
from collections import defaultdict d = defaultdict(list)#传入的参数是list list()就会得到一个空列表 d[‘a‘] d[‘alex‘].append(123) print(d) defaultdict(<class ‘list‘>, {‘a‘: [], ‘alex‘: [123]})
from collections import defaultdict li = [11,22,33,44,55,66,77,88,99] dd = defaultdict(list) for i in li: if i > 66: dd[‘k1‘].append(i) else: dd[‘k2‘].append(i) print(dd)
defaultdict(<class ‘list‘>, {‘k2‘: [11, 22, 33, 44, 55, 66], ‘k1‘: [77, 88, 99]})
要使得默认字典的值是 字符串那怎么办
from collections import defaultdict func = lambda :‘abc‘ dd = defaultdict(func) dd[1] dd[2] dd[3] dd[4] print(dd)
defaultdict(<function <lambda> at 0x0000002198502EA0>, {1: ‘abc‘, 2: ‘abc‘, 3: ‘abc‘, 4: ‘abc‘})
from collections import defaultdict func = lambda :‘abc‘ dd = defaultdict(func) dd[1] = 45 dd[2] = ‘alex‘ dd[3] dd[4] print(dd) C:ProgramDataAnaconda3python.exe C:/骑士计划1期/day25/笔记代码.py
defaultdict(<function <lambda> at 0x0000005A0BD32EA0>, {1: 45, 2: ‘alex‘, 3: ‘abc‘, 4: ‘abc‘})
命名元组
from collections import namedtuple birth = namedtuple(‘birthday‘,[‘year‘,‘month‘,‘day‘]) 对象名 类命名 类的静态属性 b1 = birth(‘2018‘,‘9‘,‘5‘) print(b1) print(b1.day) print(b1.year) print(b1.month)
birthday(year=‘2018‘, month=‘9‘, day=‘5‘) 5 2018 9
可命名元组非常类似一个只有属性没有方法的类
[‘year‘,‘month‘,‘day‘]对象的属性名
birthday 是类的名字
这个类最大的特点就是一旦实例化 就不能修改属性
queue队列
用法
put 从后端插入
get 从起前端取走
import queue #普通队列 q = queue.Queue()#队列 q.put(1) q.put(2) q.put(3) q.put(‘abc‘) q.put({‘a‘:1}) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get())
1 2 3 abc {‘a‘: 1}
双端队列deque[dek]
double-ended queue
用法:
右边插入 append
左边插入 appendleft
右边取走 pop
左边取走 popleft
from collections import deque dq = deque() dq.append(‘abc‘) dq.append(123) dq.append([11,2,3,5,]) dq.appendleft({1:‘anc‘}) dq.appendleft(‘ceds‘) print(dq)
deque([‘ceds‘, {1: ‘anc‘}, ‘abc‘, 123, [11, 2, 3, 5]])
from collections import deque dq = deque() dq.append(‘abc‘) dq.append(123) dq.append([11,2,3,5,]) dq.appendleft({1:‘anc‘}) dq.appendleft(‘ceds‘) print(dq) print(dq.pop()) print(dq.popleft())
deque([‘ceds‘, {1: ‘anc‘}, ‘abc‘, 123, [11, 2, 3, 5]]) [11, 2, 3, 5] ceds
deque([‘ceds‘, {1: ‘anc‘}, ‘abc‘, 123, [11, 2, 3, 5]]) deque([‘ceds‘, {1: ‘anc‘}, ‘alex‘, ‘abc‘, 123, [11, 2, 3, 5]])
from collections import deque dq = deque() dq.append(‘abc‘) dq.append(123) dq.append([11,2,3,5,]) dq.appendleft({1:‘anc‘}) dq.appendleft(‘ceds‘) print(dq) dq.insert(2,‘alex‘) print(dq)
队列 以及双向队列的插入效率很高
以上是关于第24篇 collections模块 双端队列 命名元组 有序字典 默认字典的主要内容,如果未能解决你的问题,请参考以下文章