国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

不可不知的python模塊--collections

韓冰 / 480人閱讀

摘要:原生的也可以從頭部添加和取出對象就像這樣但是值得注意的是,對象的這兩種用法的時間復雜度是,也就是說隨著元素數量的增加耗時呈線性上升。

基本介紹

Python擁有一些內置的數據類型,比如str, int, list, tuple, dict等, collections模塊在這些內置數據類型的基礎上,提供了幾個額外的數據類型:

namedtuple(): 生成可以使用名字來訪問元素內容的tuple子類

deque: 雙端隊列,可以快速的從另外一側追加和推出對象

Counter: 計數器,主要用來計數

OrderedDict: 有序字典

defaultdict: 帶有默認值的字典

namedtuple()

namedtuple主要用來產生可以使用名稱來訪問元素的數據對象,通常用來增強代碼的可讀性, 在訪問一些tuple類型的數據時尤其好用。
例子1:

import collections

coordinate = collections.namedtuple("Coordinate", ["x", "y"])
co = coordinate(10,20)
print(type(co))
print(co)
print(co.x, co.y)
print(co[0], co[1])
co = coordinate._make([100, 200])
print(co)
print(co.x, co.y)
co = co._replace(x=30)
print(co)
print(co.x, co.y)

運行:


Coordinate(x=10, y=20)
10 20
10 20
Coordinate(x=100, y=200)
100 200
Coordinate(x=30, y=200)
30 200

例子2:

websites = [
    ("Sohu", "http://www.sohu.com/", u"張朝陽"),
    ("Sina", "http://www.sina.com.cn/", u"王志東"),
    ("163", "http://www.163.com/", u"丁磊")
]

Website = collections.namedtuple("Website", ["name", "url", "founder"])

for website in websites:
    website = Website._make(website)
    print(website)

運行:

Website(name="Sohu", url="http://www.sohu.com/", founder="張朝陽")
Website(name="Sina", url="http://www.sina.com.cn/", founder="王志東")
Website(name="163", url="http://www.163.com/", founder="丁磊")

例子3(一摞有序的紙牌):

import collections
Card = collections.namedtuple("Card", ["rank", "suit"])


class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list("JQKA")
    suits = "spades diamonds clubs hearts".split()

    def __init__(self):
        self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self, position):
        return self._cards[position]

beer_card = Card("7", "diamonds")
print(beer_card)

deck = FrenchDeck()
print(len(deck))

print(deck._cards)
print(deck[0])
print(deck[-1])

from random import choice
print(choice(deck))

print(deck[:3])
print(deck[12::13])     # 先抽出索引是 12 的那張牌,然后每隔 13 張牌拿 1 張

for card in deck:
    print(card)

for card in reversed(deck):
    print(card)
deque

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

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

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

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

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

例子:

# -*- coding: utf-8 -*-
"""
下面這個是一個有趣的例子,主要使用了deque的rotate方法來實現了一個無限循環
的加載動畫
"""
import sys
import time
from collections import deque

fancy_loading = deque(">--------------------")

while True:
    print "
%s" % "".join(fancy_loading),
    fancy_loading.rotate(1)
    sys.stdout.flush()
    time.sleep(0.08)

運行:

# 一個無盡循環的跑馬燈
------------->-------
Counter

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

例子:

# -*- coding: utf-8 -*-
"""
下面這個例子就是使用Counter模塊統計一段句子里面所有字符出現次數
"""
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)
# 獲取出現頻率最高的5個字符
print c.most_common(5)

運行:

[(" ", 54), ("e", 32), ("s", 25), ("a", 24), ("t", 24)]
OrderedDict

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

例子:

# -*- 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

運行:

Regular Dict:
A 1
C 3
B 2
Ordered Dict:
A 1
B 2
C 3
defaultdict

我們都知道,在使用Python原生的數據結構dict的時候,如果用 d[key] 這樣的方式訪問, 當指定的key不存在時,是會拋出KeyError異常的。

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

# -*- 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

運行:

defaultdict(, {"male": ["John", "Jack", "Pony"], "female": ["Lily", "Lucy"]})

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41600.html

相關文章

  • 從??莊周夢蝶??寓言故事中感悟出一個科學真理:真假之間只相差一個 e^(iπ)

    昔者莊周夢為胡蝶,栩栩然胡蝶也。自喻適志與!不知周也。俄然覺,則蘧蘧然周也。不知周之夢為胡蝶與?胡蝶之夢為周與? ——典出《莊子·齊物論》 其故事大意為:莊周夢見自己變成一只蝴蝶,栩栩如生,感到十分愉快和愜意!不知道自己原本是莊周。突然間醒過來,驚惶不定之間方知原來自己是莊周。不知道是莊周夢中變成蝴蝶呢,還是蝴蝶夢見自己變成莊周呢? 莊周夢蝶是一則非常浪漫的寓言故事,它揭示了一個道理:這個紛繁...

    clasnake 評論0 收藏0
  • Python 弱引用 學習

    摘要:引用計數會記錄給定對象的引用個數,并在引用個數為零時收集該對象。在對象群組內部使用弱引用即不會在引用計數中被計數的引用有時能避免出現引用環,因此弱引用可用于解決循環引用的問題。 參考 1.weakref – Garbage-collectable references to objects2.Python弱引用介紹 和許多其它的高級語言一樣,Python使用了垃圾回收器來自動銷毀那些不...

    philadelphia 評論0 收藏0
  • ??大佬都在學什么?Python爬蟲分析C站大佬收藏夾,跟著大佬一起學, 你就是下一個大佬??!

    ??大佬都在學什么?Python爬蟲分析C站大佬收藏夾,跟著大佬一起學,你就是下一個大佬??! 前言程序說明數據爬取獲取 CSDN 作者總榜數據獲取收藏夾列表獲取收藏數據爬蟲程序完整代碼爬取數據結果 數據分析及可視化 前言 計算機行業的發展太快了,有時候幾天不學習,就被時代所拋棄了,因此對于我們程序員而言,最重要的就是要時刻緊跟業界動態變化,學習新的技術,但是很多時候我們又不知道學什么好,萬...

    Yang_River 評論0 收藏0
  • Python3 CookBook | 數據結構和算法(二)

    摘要:以下測試代碼全部基于查找最大或最小的個元素工作中有時會遇到這樣的需求,取出數據中前面的值,或者最后的值。大家如果對堆數據結構感興趣的話,可以繼續進行深入研究,由于我了解的并不深,也沒辦法再展開了。 文章首發于知乎專欄,歡迎關注。https://zhuanlan.zhihu.com/py... 以下測試代碼全部基于 Python3 1、查找最大或最小的 N 個元素 工作中有時會遇到這樣的...

    geekidentity 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<