两颗西柚 collections 这么好用,原来( 三 )
index(x[,start[,stop]]):返回第x个元素(从start开始计算 , 在stop之前) 。 返回第一个匹配 , 如果没找到的话 , 抛出ValueError 。
insert(i,x):在位置i插入x 。 注:如果插入会导致一个限长deque超出长度maxlen的话 , 就抛出一个IndexError 。
pop:移除最右侧的元素 。
popleft:移除最左侧的元素 。
remove(value):移去找到的第一个value 。 没有抛出ValueError 。
reverse:将deque逆序排列 。 返回None 。
maxlen:队列的最大长度 , 没有限定则为None 。
>>>d=collections.deque(maxlen=10)>>>ddeque([],maxlen=10)>>>d.extend('python')>>>[i.upper()foriind]['P','Y','T','H','O','N']>>>d.append('e')>>>d.appendleft('f')>>>d.appendleft('g')>>>d.appendleft('h')>>>ddeque(['h','g','f','p','y','t','h','o','n','e'],maxlen=10)>>>d.appendleft('i')>>>ddeque(['i','h','g','f','p','y','t','h','o','n'],maxlen=10)>>>d.append('m')>>>ddeque(['h','g','f','p','y','t','h','o','n','m'],maxlen=10)
ChainMap
问题背景是我们有多个字典或者映射 , 想把它们合并成为一个单独的映射 , 有人说可以用update进行合并 , 这样做的问题就是新建了一个数据结构以致于当我们对原来的字典进行更改的时候不会同步 。 如果想建立一个同步的查询方法 , 可以使用ChainMap 。
可以用来合并两个或者更多个字典 , 当查询的时候 , 从前往后依次查询 。 简单使用:
>>>d1={'apple':1,'banana':2}>>>d2={'orange':2,'apple':3,'pike':1}>>>combined1=collections.ChainMap(d1,d2)>>>combined2=collections.ChainMap(d2,d1)>>>combined1ChainMap({'apple':1,'banana':2},{'orange':2,'apple':3,'pike':1})>>>combined2ChainMap({'orange':2,'apple':3,'pike':1},{'apple':1,'banana':2})>>>fork,vincombined1.items:...print(k,v)...orange2apple1pike1banana2>>>fork,vincombined2.items:...print(k,v)...apple3banana2orange2pike1
有一个注意点就是当对ChainMap进行修改的时候总是只会对第一个字典进行修改 , 如果第一个字典不存在该键 , 会添加 。
>>>d1={'apple':1,'banana':2}>>>d2={'orange':2,'apple':3,'pike':1}>>>c=collections.ChainMap(d1,d2)>>>cChainMap({'apple':1,'banana':2},{'orange':2,'apple':3,'pike':1})>>>c['apple']1>>>c['apple']=2>>>cChainMap({'apple':2,'banana':2},{'orange':2,'apple':3,'pike':1})>>>c['pike']1>>>c['pike']=3>>>cChainMap({'apple':2,'banana':2,'pike':3},{'orange':2,'apple':3,'pike':1})
从原理上面讲 , ChainMap实际上是把放入的字典存储在一个队列中 , 当进行字典的增加删除等操作只会在第一个字典上进行 , 当进行查找的时候会依次查找 , new_child方法实质上是在列表的第一个元素前放入一个字典 , 默认是{} , 而parents是去掉了列表开头的元素 。
>>>a=collections.ChainMap>>>a['x']=1>>>aChainMap({'x':1})>>>b=a.new_child>>>bChainMap({},{'x':1})>>>b['x']=2>>>bChainMap({'x':2},{'x':1})>>>b['y']=3>>>bChainMap({'x':2,'y':3},{'x':1})>>>aChainMap({'x':1})>>>c=a.new_child>>>cChainMap({},{'x':1})>>>c['x']=1>>>c['y']=1>>>cChainMap({'x':1,'y':1},{'x':1})>>>d=c.parents>>>dChainMap({'x':1})>>>disaFalse>>>d==aTrue
- 邂逅小森师兄 9渲染图曝光:后置至少有两颗 48MP 镜头,OnePlus
- 两颗西柚 Reno5入网,Reno4跌至白菜价,网友按打买,OPPO
- 两颗西柚 一加8惭愧价崩,加友很受伤,一加9外观渲染图首度曝光
- 两颗西柚 处理PCB时建议使用的几种预防措施
- 半个西柚|8个许多穷人经常会买,但富人绝对不会购买的事物
- |“一道杠”到“两颗星”,一起来看看新排长们地历练之初
- 科学信仰 未来都将不复存在,火星会陷入孤独吗?,火星的两颗卫星
- 晓破看盘|表示多头力量强大,股价必有拉升!,一旦出现“上涨两颗星”走势
- 二次元西柚酱|名柯中角色发福后的样子,没了锥子脸的他们,有没有丑到你