最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python collections模塊實例講解

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

collections模塊基本介紹

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

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

namedtuple()

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

舉個栗子

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

# -*- coding: utf-8 -*-
"""
比如我們用戶擁有一個這樣的數(shù)據(jù)結(jié)構(gòu),每一個對象是擁有三個元素的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其實是 double-ended queue 的縮寫,翻譯過來就是雙端隊列,它最大的好處就是實現(xiàn)了從隊列 頭部快速增加和取出對象: .popleft(), .appendleft() 。

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

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

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

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

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

舉個栗子

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

# -*- coding: utf-8 -*-
"""
下面這個是一個有趣的例子,主要使用了deque的rotate方法來實現(xiàn)了一個無限循環(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:
# 一個無盡循環(huán)的跑馬燈
------------->-------


Counter

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

舉個栗子

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

# -*- coding: utf-8 -*-
"""
下面這個例子就是使用Counter模塊統(tǒng)計一段句子里面所有字符出現(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個字符
print c.most_common(5)
# Result:
[(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]

OrderedDict

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

舉個栗子

復(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的時候,如果用 d[key] 這樣的方式訪問, 當指定的key不存在時,是會拋出KeyError異常的。

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

復(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)容,主要目的就是當你碰到適合使用 它們的場所時,能夠記起并使用它們,起到事半功倍的效果。

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

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

相關(guān)文章

  • 用scikit-learn和pandas學(xué)習(xí)線性回歸的方法

    用scikit-learn和pandas學(xué)習(xí)線性回歸的方法

    這篇文章主要介紹了用scikit-learn和pandas學(xué)習(xí)線性回歸的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 解決一個pandas執(zhí)行模糊查詢sql的坑

    解決一個pandas執(zhí)行模糊查詢sql的坑

    這篇文章主要介紹了解決一個pandas執(zhí)行模糊查詢sql的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 跟老齊學(xué)Python之用Python計算

    跟老齊學(xué)Python之用Python計算

    做為零基礎(chǔ)學(xué)習(xí)Python,也就從計算小學(xué)數(shù)學(xué)題目開始吧。因為從這里開始,數(shù)學(xué)的基礎(chǔ)知識列為肯定過關(guān)了。
    2014-09-09
  • python中如何使用分步式進程計算詳解

    python中如何使用分步式進程計算詳解

    抽了點時間體驗了一把python分布式進程,有點像分布式計算的意思,這篇文章主要給大家介紹了關(guān)于python中如何使用分步式進程計算的相關(guān)資料,需要的朋友可以參考下
    2019-03-03
  • python的pstuil模塊使用方法總結(jié)

    python的pstuil模塊使用方法總結(jié)

    這篇文章主要介紹了python的pstuil模塊使用方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Ollama Python 使用小結(jié)

    Ollama Python 使用小結(jié)

    Ollama提供了Python SDK,使得開發(fā)者能夠在Python環(huán)境中輕松集成和使用本地運行的模型進行自然語言處理任務(wù),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 簡介Python中用于處理字符串的center()方法

    簡介Python中用于處理字符串的center()方法

    這篇文章主要介紹了簡介Python中用于處理字符串的center()方法,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python必考的5道面試題集合

    Python必考的5道面試題集合

    這篇文章介紹了Python必考的5道面試題,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 詳細介紹pandas的DataFrame的append方法使用

    詳細介紹pandas的DataFrame的append方法使用

    這篇文章主要介紹了詳細介紹pandas的DataFrame的append方法使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python Pygame實現(xiàn)落球游戲詳解

    Python Pygame實現(xiàn)落球游戲詳解

    本文主要介紹了利用Pygame實現(xiàn)落球小游戲,即屏幕上落下一個球,通過鼠標移動,地下的木塊如果接上則加分,否則就減去一命,三條命用完則游戲結(jié)束。感興趣的可以學(xué)習(xí)
    2022-01-01

最新評論

进贤县| 儋州市| 蓝山县| 邛崃市| 瑞丽市| 集安市| 安宁市| 永登县| 金乡县| 都匀市| 察隅县| 翁源县| 罗定市| 万州区| 青浦区| 黄大仙区| 张北县| 永善县| 民勤县| 湖南省| 亚东县| 西宁市| 吐鲁番市| 霞浦县| 桂东县| 吉林市| 茶陵县| 昆山市| 通渭县| 湾仔区| 墨竹工卡县| 临夏市| 呼伦贝尔市| 绥中县| 那曲县| 汶川县| 岳池县| 河间市| 金平| 财经| 拜泉县|