collections子產品是python2.7.3之後新加的功能。
檢視collections子產品中某個方法的使用說明
1
2
3
<code>>>> </code><code>import</code> <code>collections</code>
<code>>>> help(collections)</code>
<code>>>> help(collections.Counter)</code>
1.1、計數器(Counter)
功能:Counter是對字典類型的補充,用于追蹤值的次數
ps:具備字典的所有功能 + 自己的功能
4
<code>>>> c1=collections.Counter(</code><code>'asdasdf'</code><code>)</code>
<code>>>> print c1</code>
<code>Counter({</code><code>'a'</code><code>: 2, </code><code>'s'</code><code>: 2, </code><code>'d'</code><code>: 2, </code><code>'f'</code><code>: 1})</code>
1.2、c.update(d):将c、d兩個計數器相加
5
6
7
8
9
<code>>>> c = collections.Counter(</code><code>'aabc'</code><code>)</code>
<code>>>> c</code>
<code>Counter({</code><code>'a'</code><code>: 2, </code><code>'c'</code><code>: 1, </code><code>'b'</code><code>: 1})</code>
<code>>>> d=collections.Counter(</code><code>'aab'</code><code>)</code>
<code>>>> d</code>
<code>Counter({</code><code>'a'</code><code>: 2, </code><code>'b'</code><code>: 1})</code>
<code>>>> c.update(d)</code>
<code>Counter({</code><code>'a'</code><code>: 4, </code><code>'b'</code><code>: 2, </code><code>'c'</code><code>: 1})</code>
1.3 clear() 清空計數器
<code>>>> c.</code><code>clear</code><code>()</code>
<code>Counter()</code>
2. 有序字典(OrderedDict):
<code>功能:orderedDict是對字典類型的補充,他記住了字典元素的添加順序</code>
我們知道字典是無序的,清單是有序的,OrderedDict方法原理就是将字典指派時的key按順序儲存到一個清單中,例如list=[k1,k2,k3,...]。最後将字典的值按key的順序調用出來
<code>o1 = collections.OrderedDict()</code>
<code>o1[</code><code>'k1'</code><code>] = 1</code>
<code>o1[</code><code>'k2'</code><code>] = 2</code>
<code>o1[</code><code>'k3'</code><code>] = 3</code>
<code>>>> o1</code>
<code>OrderedDict([(</code><code>'k1'</code><code>, 1), (</code><code>'k2'</code><code>, 2), (</code><code>'k3'</code><code>, 3)])</code>
3、預設字典(defaultdict):
功能:為字典中的values設定一個預設的類型,可以為清單,元組或者字典
例如:
<code>>>> my_dict = collections.defaultdict(list)</code>
<code>>>> my_dict[</code><code>'k1'</code><code>].append(1)</code>
<code>>>> my_dict</code>
<code>defaultdict(<</code><code>type</code> <code>'list'</code><code>>, {</code><code>'k1'</code><code>: [1]})</code>
這裡由于定義了預設values的類型為list,是以後面才能使用append方法,往清單指派
預設字典2:上面的例子還可以這樣寫
<code>>>> dic = {}</code>
<code>>>> dic[</code><code>'k1'</code><code>] = []</code>
<code>>>> dic[</code><code>'k1'</code><code>].append(1)</code>
<code>>>> dic</code>
<code>{</code><code>'k1'</code><code>: [1]}</code>
示例:
有一個清單list1=[11,22,55,66,77,90],将該清單中大于66的值放在字典dict1的k2中,其他的值放在k1中
使用預設字典,這樣寫:
10
11
<code>>>> list1=[11,22,55,66,77,90]</code>
<code>>>> dict1=collections.defaultdict(list)</code>
<code>>>> </code><code>for</code> <code>value </code><code>in</code> <code>list1:</code>
<code>... </code><code>if</code> <code>value > 66:</code>
<code>... dict1[</code><code>'k2'</code><code>].append(value)</code>
<code>... </code><code>else</code><code>:</code>
<code>... dict1[</code><code>'k1'</code><code>].append(value)</code>
<code>...</code>
<code>>>> dict1</code>
<code>defaultdict(<</code><code>type</code> <code>'list'</code><code>>, {</code><code>'k2'</code><code>: [77, 90], </code><code>'k1'</code><code>: [11, 22, 55, 66]})</code>
4、可命名元組(namedtuple):
根據namedtuple可以建立一個包含tuple所有功能以及其他功能的類型
需求:通常我們可以用元組表示x、y軸坐标,例如(1,4)但是我們事先約定好了1的位置表示x軸,4為y軸。加入事先沒有約定x、y軸的位置,那麼我們就不清楚哪個是x軸,哪個是y軸。那麼我們如何定義一個元組,将x、y軸的值在元組中進行命名呢?
示例
<code>>>> mytuple = collections.namedtuple(</code><code>'mytuple'</code><code>,[</code><code>'x'</code><code>,</code><code>'y'</code><code>])</code>
<code>>>> tuple1 = mytuple(1,2)</code>
<code>>>> tuple1</code>
<code>mytuple(x=1, y=2)</code>
5、deque()雙向隊列
deque可以從隊列兩端添加和删除元素
12
<code>>>> q = collections.deque()</code>
<code>>>> q.append(1)</code>
<code>>>> q.append(2)</code>
<code>>>> q.append(3)</code>
<code>>>> q</code>
<code>deque([1, 2, 3])</code>
<code>>>> q.pop()</code>
<code>3</code>
<code>>>> q.popleft()</code>
<code>1</code>
<code>deque([2])</code>
extend()
擴充隊列
<code>>>> q.extend(</code><code>'3'</code><code>)</code>
<code>deque([2, </code><code>'3'</code><code>])</code>
extendleft()
從左邊擴充隊列
<code>>>> q.extendleft(</code><code>'1'</code><code>)</code>
<code>deque([</code><code>'1'</code><code>, 2, </code><code>'3'</code><code>])</code>
remove()
删除隊列中的某個元素
<code>>>> q.remove(2)</code>
<code>deque([</code><code>'1'</code><code>, </code><code>'3'</code><code>])</code>
6、Queue()單項隊列
單項隊列沒有左右之分,但是有一個原則就是先進先出:FIFO(first in first out)與之相反的就是棧,先進後出,類似于彈夾的原理
13
14
15
<code>>>> </code><code>import</code> <code>Queue</code>
<code>>>> q = Queue.Queue(10)</code>
<code><Queue.Queue instance at 0x1085c3878></code>
<code>>>> q.put(1)</code>
<code>>>> q.put(2)</code>
<code>>>> q.put(3)</code>
<code>>>> q.get()</code>
<code>2</code>
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1821985,如需轉載請自行聯系原作者