码迷,mamicode.com
首页 > 其他好文 > 详细

collection系列用法

时间:2016-03-24 20:24:19      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

deque双向队列

Deque可以从两端添加和删除元素。常用的结构,是它的简化版本。

Deque支持序列的常用操作,现在举一个简单例子,你会发现其实跟平成的list没啥区别:

1 import collections
2 
3 dic=collections.deque(abcdefg)
4 print deque=,dic
5 print Length:,len(dic)
6 print Left end:,dic[0]
7 print Right end:,dic[-1]
8 dic.remove(c)
9 print remove(c):,dic

截图直接贴图了:

技术分享

是不是发现和list一本一样,只是变成了deque(list),关键是一些基本的用法都一样,来个对比图吧这样更直接些:

1 listTest=[a, b, c, d, e, f, g]
2 print listTest=,listTest
3 print Length:,len(listTest)
4 print Left end:,listTest[0]
5 print Right end:,listTest[-1]
6 listTest.remove(c)
7 print remove(c):,listTest

 还是直接贴图:

技术分享

下面的独特之处就来了,双向操作。deque是通过extend方法初始化集合元素的,同时你可以通过extendleft将结合元素从“左边”加入到集合中:

 1 import collections  
 2 d1=collections.deque()  
 3 d1.extend(abcdefg)  #可以列表元素
 4 print extend:,d1  
 5 d1.append(h)  #只会认为是一个元素加入 
 6 print append:,d1  
 7 # add to left  
 8 d2=collections.deque()  
 9 d2.extendleft(xrange(6)) #从左边加入元素  
10 print extendleft:,d2  
11 d2.appendleft(6)  #从左边加入元素
12 print appendleft:,d2

d1.append(h) #只会认为是一个元素加入
技术分享

技术分享
d1.extend(abcdefg)  #可以列表元素

执行结果图:

技术分享

与append和appendleft方法对应的还有pop和popleft方法分别用于从集合中取出元素,看下面的例子:

 1 print "From the right"  
 2 d1=collections.deque(abcdefg)
 3 print d1==,d1 
 4 while True:  
 5     try:  
 6         print d1.pop(),  
 7     except IndexError:  
 8         break  
 9 print  
10 print \n From the left  
11 d2=collections.deque(xrange(6))
12 print d2==,d2  
13 while True:  
14     try:  
15         print d2.popleft(),  
16     except IndexError:  
17         break  
18 print                 

执行结果:

技术分享

最后值得一提的是,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()                                  

 

collection系列用法

标签:

原文地址:http://www.cnblogs.com/chushiyaoyue/p/5316641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!