欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python collections模塊實(shí)例講解

 更新時(shí)間:2024年07月01日 16:35:58   投稿:junjie  
Python作為一個(gè)“內(nèi)置電池”的編程語言,標(biāo)準(zhǔn)庫里面擁有非常多好用的模塊。比如今天想給大家 介紹的 collections 就是一個(gè)非常好的例子

collections模塊基本介紹

我們都知道,Python擁有一些內(nèi)置的數(shù)據(jù)類型,比如str, int, list, tuple, dict等, collections模塊在這些內(nèi)置數(shù)據(jù)類型的基礎(chǔ)上,提供了幾個(gè)額外的數(shù)據(jù)類型:

1.namedtuple(): 生成可以使用名字來訪問元素內(nèi)容的tuple子類
2.deque: 雙端隊(duì)列,可以快速的從另外一側(cè)追加和推出對象
3.Counter: 計(jì)數(shù)器,主要用來計(jì)數(shù)
4.OrderedDict: 有序字典
5.defaultdict: 帶有默認(rèn)值的字典

namedtuple()

namedtuple主要用來產(chǎn)生可以使用名稱來訪問元素的數(shù)據(jù)對象,通常用來增強(qiáng)代碼的可讀性, 在訪問一些tuple類型的數(shù)據(jù)時(shí)尤其好用。

舉個(gè)栗子

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
"""
比如我們用戶擁有一個(gè)這樣的數(shù)據(jù)結(jié)構(gòu),每一個(gè)對象是擁有三個(gè)元素的tuple。
使用namedtuple方法就可以方便的通過tuple來生成可讀性更高也更好用的數(shù)據(jù)結(jié)構(gòu)。
"""
from collections import namedtuple
websites = [
    ('Sohu', 'http://www.google.com/', u'1'),
    ('Sina', 'http://www.sina.com.cn/', u'2'),
    ('163', 'http://www.163.com/', u'3')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
    website = Website._make(website)
    print website
# Result:
Website(name='Sohu', url='http://www.google.com/', founder=u'\u5f20\u671d\u9633')
Website(name='Sina', url='http://www.sina.com.cn/', founder=u'\u738b\u5fd7\u4e1c')
Website(name='163', url='http://www.163.com/', founder=u'\u4e01\u78ca')

deque

deque其實(shí)是 double-ended queue 的縮寫,翻譯過來就是雙端隊(duì)列,它最大的好處就是實(shí)現(xiàn)了從隊(duì)列 頭部快速增加和取出對象: .popleft(), .appendleft() 。

你可能會說,原生的list也可以從頭部添加和取出對象???就像這樣:

復(fù)制代碼 代碼如下:

l.insert(0, v)
l.pop(0)

但是值得注意的是,list對象的這兩種用法的時(shí)間復(fù)雜度是 O(n) ,也就是說隨著元素?cái)?shù)量的增加耗時(shí)呈 線性上升。而使用deque對象則是 O(1) 的復(fù)雜度,所以當(dāng)你的代碼有這樣的需求的時(shí)候, 一定要記得使用deque。

作為一個(gè)雙端隊(duì)列,deque還提供了一些其他的好用方法,比如 rotate 等。

舉個(gè)栗子

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
"""
下面這個(gè)是一個(gè)有趣的例子,主要使用了deque的rotate方法來實(shí)現(xiàn)了一個(gè)無限循環(huán)
的加載動畫
"""
import sys
import time
from collections import deque
fancy_loading = deque('>--------------------')
while True:
    print '\r%s' % ''.join(fancy_loading),
    fancy_loading.rotate(1)
    sys.stdout.flush()
    time.sleep(0.08)
# Result:
# 一個(gè)無盡循環(huán)的跑馬燈
------------->-------


Counter

計(jì)數(shù)器是一個(gè)非常常用的功能需求,collections也貼心的為你提供了這個(gè)功能。

舉個(gè)栗子

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
"""
下面這個(gè)例子就是使用Counter模塊統(tǒng)計(jì)一段句子里面所有字符出現(xiàn)次數(shù)
"""
from collections import Counter
s = '''A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'''.lower()
c = Counter(s)
# 獲取出現(xiàn)頻率最高的5個(gè)字符
print c.most_common(5)
# Result:
[(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]

OrderedDict

在Python中,dict這個(gè)數(shù)據(jù)結(jié)構(gòu)由于hash的特性,是無序的,這在有的時(shí)候會給我們帶來一些麻煩, 幸運(yùn)的是,collections模塊為我們提供了OrderedDict,當(dāng)你要獲得一個(gè)有序的字典對象時(shí),用它就對了。

舉個(gè)栗子

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
from collections import OrderedDict
items = (
    ('A', 1),
    ('B', 2),
    ('C', 3)
)
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
print 'Regular Dict:'
for k, v in regular_dict.items():
    print k, v
print 'Ordered Dict:'
for k, v in ordered_dict.items():
    print k, v
# Result:
Regular Dict:
A 1
C 3
B 2
Ordered Dict:
A 1
B 2
C 3

defaultdict

我們都知道,在使用Python原生的數(shù)據(jù)結(jié)構(gòu)dict的時(shí)候,如果用 d[key] 這樣的方式訪問, 當(dāng)指定的key不存在時(shí),是會拋出KeyError異常的。

但是,如果使用defaultdict,只要你傳入一個(gè)默認(rèn)的工廠方法,那么請求一個(gè)不存在的key時(shí), 便會調(diào)用這個(gè)工廠方法使用其結(jié)果來作為這個(gè)key的默認(rèn)值。

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
from collections import defaultdict
members = [
    # Age, name
    ['male', 'John'],
    ['male', 'Jack'],
    ['female', 'Lily'],
    ['male', 'Pony'],
    ['female', 'Lucy'],
]
result = defaultdict(list)
for sex, name in members:
    result[sex].append(name)
print result
# Result:
defaultdict(<type 'list'>, {'male': ['John', 'Jack', 'Pony'], 'female': ['Lily', 'Lucy']})

參考資料

上面只是非常簡單的介紹了一下collections模塊的主要內(nèi)容,主要目的就是當(dāng)你碰到適合使用 它們的場所時(shí),能夠記起并使用它們,起到事半功倍的效果。

如果要對它們有一個(gè)更全面和深入了解的話,還是建議閱讀官方文檔和模塊源碼。

https://docs.python.org/2/library/collections.html#module-collections

相關(guān)文章

  • 淺談pytorch 模型 .pt, .pth, .pkl的區(qū)別及模型保存方式

    淺談pytorch 模型 .pt, .pth, .pkl的區(qū)別及模型保存方式

    這篇文章主要介紹了淺談pytorch 模型 .pt, .pth, .pkl的區(qū)別及模型保存方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 關(guān)于python變量的引用以及在底層存儲原理

    關(guān)于python變量的引用以及在底層存儲原理

    Python的變量,簡單來說有數(shù)值型,布爾型,字符串類型,列表,元組,字典等6大類。那么不同變量類型在底層是如何存儲的,關(guān)系到變量的引用,能否正確的掌握變量的相關(guān)操作?接下來小編就來為大家講解python變量的引用以及在底層存儲原理,需要的朋友可以參考一下
    2021-09-09
  • 在GitHub Pages上使用Pelican搭建博客的教程

    在GitHub Pages上使用Pelican搭建博客的教程

    這篇文章主要介紹了在GitHub Pages上使用Pelican搭建博客的教程,Pelican是一個(gè)使用Python實(shí)現(xiàn)的開源博客系統(tǒng),需要的朋友可以參考下
    2015-04-04
  • PyTorch?Autograd的核心原理和功能深入探究

    PyTorch?Autograd的核心原理和功能深入探究

    本文深入探討了PyTorch中Autograd的核心原理和功能,從基本概念、Tensor與Autograd的交互,到計(jì)算圖的構(gòu)建和管理,再到反向傳播和梯度計(jì)算的細(xì)節(jié),最后涵蓋了Autograd的高級特性
    2024-01-01
  • Python NumPy數(shù)組裁切和數(shù)據(jù)類型的實(shí)現(xiàn)即原理詳解

    Python NumPy數(shù)組裁切和數(shù)據(jù)類型的實(shí)現(xiàn)即原理詳解

    這篇文章主要介紹了Python NumPy數(shù)組裁切和數(shù)據(jù)類型的實(shí)現(xiàn)即原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Django零基礎(chǔ)入門之調(diào)用漂亮的HTML前端頁面

    Django零基礎(chǔ)入門之調(diào)用漂亮的HTML前端頁面

    這篇文章主要介紹了Django零基礎(chǔ)入門之調(diào)用漂亮的HTML前端頁面的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn)

    python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn)

    在Python中,getattr和getattribute是用于動態(tài)屬性訪問和自定義屬性訪問行為的重要工具,本文主要介紹了python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    正好最近在學(xué)習(xí)python,于是打算用python實(shí)現(xiàn)了數(shù)據(jù)導(dǎo)入導(dǎo)出工具,由于是新手,所以寫的有些不完善的地方還請見諒
    2015-07-07
  • Python NumPy庫安裝使用筆記

    Python NumPy庫安裝使用筆記

    這篇文章主要介紹了Python NumPy庫安裝使用筆記,本文講解了NumPy的安裝和基礎(chǔ)使用,并對每一句代碼都做了詳細(xì)解釋,需要的朋友可以參考下
    2015-05-05
  • Python 3.6 讀取并操作文件內(nèi)容的實(shí)例

    Python 3.6 讀取并操作文件內(nèi)容的實(shí)例

    下面小編就為大家分享一篇Python 3.6 讀取并操作文件內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評論