Python Deque 模块,,Deque模块是Py
Python Deque 模块,,Deque模块是Py
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除.
import collections d=collections.deque(‘abcdefg‘) print ‘Deque:‘,d print ‘Length:‘,len(d) print ‘Left end:‘,d[0] print ‘Right end:‘,d[-1] d.remove(‘c‘) print ‘remove(c):‘,d
下面是输出的结果,从结果看好像似乎和普通的list没有多大区别:
Deque:deque([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘])Length:7Leftend:aRightend:gremove(c):deque([‘a‘,‘b‘,‘d‘,‘e‘,‘f‘,‘g‘])不过,下面的例子就可以看到,deque是通过extend方法初始化集合元素的,同时你可以通过extendleft将结合元素从“左边”加入到集合中:
import collections d1=collections.deque() d1.extend(‘abcdefg‘) print ‘extend:‘,d1 d1.append(‘h‘) print ‘append:‘,d1 # add to left d2=collections.deque() d2.extendleft(xrange(6)) print ‘extendleft:‘,d2 d2.appendleft(6) print ‘appendleft:‘,d2
从输出的结果,我们可以看到,append默认从集合的右边增加数组元素,而另一个appendleft可以从集合的左边增加元素,输出结果如下:
extend:deque([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘])append:deque([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘])extendleft:deque([5,4,3,2,1,0])appendleft:deque([6,5,4,3,2,1,0])与append和appendleft方法对应的还有pop和popleft方法分别用于从集合中取出元素,看下面的例子:
import collections print "From the right" d=collections.deque(‘abcdefg‘) while True: try: print d.pop(), except IndexError: break print print ‘\n From the left‘ d=collections.deque(xrange(6)) while True: try: print d.popleft(), except IndexError: break print
其输出结果为:
FromtherightgfedcbaFromtheleft012345最后值得一提的是,deque是线程安全的,也就是说你可以同时从deque集合的左边和右边进行操作而不会有影响,看下面的代码:
import collections import threading import time candle=collections.deque(xrange(5)) def burn(direction,nextSource): while True: try: next=nextSource() except IndexError: break else: print ‘%s : %s‘ % (direction,next) time.sleep(0.1) print "done %s" % direction return left=threading.Thread(target=burn,args=(‘left‘,candle.popleft)) right=threading.Thread(target=burn,args=(‘right‘,candle.pop)) left.start() right.start() left.join() right.join()
为了试验线程安全,我们分别起了两个线程从deque的左边和右边开始移出集合元素,其输出结果如下:
left:0right:4right:3left:1left:2donerightdoneleftPython Deque 模块
相关内容
- Python学习之路——Linux基础之yum,pythonyum,yum本地源修改
- Python下载numpy和pandas踩过的大坑,,Python下载nu
- Pycharm+Django搭建第一个Python Web程序,,1.安装django
- Python:strip 函数的陷阱,,S.strip(ch
- python之懒惰属性(延迟初始化),, Python 对
- 解决python tkinter 与 sleep 延迟问题,,多线程(thread
- ArcGIS + Python 批量裁剪、添加X/Y坐标脚本,arcgispython,前
- python学习随笔(三)_字符串,,字符串*** 是由一
- Python 异常处理,python异常处理,Python异常Py
- python继承细节,python继承,不要子类化内置类型内
评论关闭