1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| deque这个对象类似于list列表,不过你可以操作它的“两端,list也能实现操作两端的数据(insert,pop),但是deque是线程安全的,且list对象的这两种用法的时间复杂度是 O(n) ,也就是说随着元素数量的增加耗时呈 线性上升。而使用deque对象则是 O(1) 的复杂度。
例1: 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
结果 Deque: deque(['a', 'b', 'c', 'd', 'e', 'f', 'g']) Length: 7 Left end: a Right end: g remove(c): deque(['a', 'b', 'd', 'e', 'f', 'g'])
例2: 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
结果 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])
例3:还可以使用rotate做出循环跑马灯的效果 a = deque('>--------------------')
while True: a.rotate(1) print '\r%s' % ''.join(a) time.sleep(2)
结果 ->------------------- -->------------------ --->-----------------
|