天天看點

collections系列功能介紹

collections子產品是python2.7.3之後新加的功能。

檢視collections子產品中某個方法的使用說明

1

2

3

<code>&gt;&gt;&gt; </code><code>import</code> <code>collections</code>

<code>&gt;&gt;&gt; help(collections)</code>

<code>&gt;&gt;&gt; help(collections.Counter)</code>

1.1、計數器(Counter)

功能:Counter是對字典類型的補充,用于追蹤值的次數

ps:具備字典的所有功能 + 自己的功能

4

<code>&gt;&gt;&gt; c1=collections.Counter(</code><code>'asdasdf'</code><code>)</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; c = collections.Counter(</code><code>'aabc'</code><code>)</code>

<code>&gt;&gt;&gt; c</code>

<code>Counter({</code><code>'a'</code><code>: 2, </code><code>'c'</code><code>: 1, </code><code>'b'</code><code>: 1})</code>

<code>&gt;&gt;&gt; d=collections.Counter(</code><code>'aab'</code><code>)</code>

<code>&gt;&gt;&gt; d</code>

<code>Counter({</code><code>'a'</code><code>: 2, </code><code>'b'</code><code>: 1})</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; my_dict = collections.defaultdict(list)</code>

<code>&gt;&gt;&gt; my_dict[</code><code>'k1'</code><code>].append(1)</code>

<code>&gt;&gt;&gt; my_dict</code>

<code>defaultdict(&lt;</code><code>type</code> <code>'list'</code><code>&gt;, {</code><code>'k1'</code><code>: [1]})</code>

這裡由于定義了預設values的類型為list,是以後面才能使用append方法,往清單指派

預設字典2:上面的例子還可以這樣寫

<code>&gt;&gt;&gt; dic = {}</code>

<code>&gt;&gt;&gt; dic[</code><code>'k1'</code><code>] = []</code>

<code>&gt;&gt;&gt; dic[</code><code>'k1'</code><code>].append(1)</code>

<code>&gt;&gt;&gt; dic</code>

<code>{</code><code>'k1'</code><code>: [1]}</code>

示例:

有一個清單list1=[11,22,55,66,77,90],将該清單中大于66的值放在字典dict1的k2中,其他的值放在k1中

使用預設字典,這樣寫:

10

11

<code>&gt;&gt;&gt; list1=[11,22,55,66,77,90]</code>

<code>&gt;&gt;&gt; dict1=collections.defaultdict(list)</code>

<code>&gt;&gt;&gt; </code><code>for</code> <code>value </code><code>in</code> <code>list1:</code>

<code>...     </code><code>if</code> <code>value &gt; 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>&gt;&gt;&gt; dict1</code>

<code>defaultdict(&lt;</code><code>type</code> <code>'list'</code><code>&gt;, {</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>&gt;&gt;&gt; mytuple = collections.namedtuple(</code><code>'mytuple'</code><code>,[</code><code>'x'</code><code>,</code><code>'y'</code><code>])</code>

<code>&gt;&gt;&gt; tuple1 = mytuple(1,2)</code>

<code>&gt;&gt;&gt; tuple1</code>

<code>mytuple(x=1, y=2)</code>

5、deque()雙向隊列

deque可以從隊列兩端添加和删除元素

12

<code>&gt;&gt;&gt; q = collections.deque()</code>

<code>&gt;&gt;&gt; q.append(1)</code>

<code>&gt;&gt;&gt; q.append(2)</code>

<code>&gt;&gt;&gt; q.append(3)</code>

<code>&gt;&gt;&gt; q</code>

<code>deque([1, 2, 3])</code>

<code>&gt;&gt;&gt; q.pop()</code>

<code>3</code>

<code>&gt;&gt;&gt; q.popleft()</code>

<code>1</code>

<code>deque([2])</code>

extend() 

擴充隊列

<code>&gt;&gt;&gt; q.extend(</code><code>'3'</code><code>)</code>

<code>deque([2, </code><code>'3'</code><code>])</code>

extendleft()

從左邊擴充隊列

<code>&gt;&gt;&gt; q.extendleft(</code><code>'1'</code><code>)</code>

<code>deque([</code><code>'1'</code><code>, 2, </code><code>'3'</code><code>])</code>

remove()

删除隊列中的某個元素

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; </code><code>import</code> <code>Queue</code>

<code>&gt;&gt;&gt; q = Queue.Queue(10)</code>

<code>&lt;Queue.Queue instance at 0x1085c3878&gt;</code>

<code>&gt;&gt;&gt; q.put(1)</code>

<code>&gt;&gt;&gt; q.put(2)</code>

<code>&gt;&gt;&gt; q.put(3)</code>

<code>&gt;&gt;&gt; q.get()</code>

<code>2</code>

本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1821985,如需轉載請自行聯系原作者

繼續閱讀