自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python進(jìn)階:解密collections庫的高級(jí)功能

開發(fā) 前端
本文主要介紹的Counter和defaultdict類還有雙端隊(duì)列deque的意義和用途,這幾個(gè)類比較常見,可以來詳細(xì)剖析一下。

Python內(nèi)置庫collections提供了一些強(qiáng)大的工具類,可以簡(jiǎn)化和優(yōu)化我們的編程過程。本文將重點(diǎn)探索collections庫中的幾個(gè)類的使用。通過詳細(xì)的代碼示例和解釋,展示如何利用Counter計(jì)數(shù)和統(tǒng)計(jì)元素,以及如何使用defaultdict創(chuàng)建有默認(rèn)值的字典。本文旨在為Python初學(xué)者提供清晰的指導(dǎo),同時(shí)為其他開發(fā)者提供一些啟發(fā)。

一、常見類的介紹

Pythoncollections這個(gè)庫包含的內(nèi)置對(duì)象很多,這個(gè)是內(nèi)置庫源碼的一部分,如下所示:

__all__ = [
    'ChainMap',
    'Counter',
    'OrderedDict',
    'UserDict',
    'UserList',
    'UserString',
    'defaultdict',
    'deque',
    'namedtuple',
]

本文主要介紹的Counter和defaultdict類還有雙端隊(duì)列deque的意義和用途,這幾個(gè)類比較常見,可以來詳細(xì)剖析一下。

二、Counter類的使用

1. Counter類的定義和功能說明

Counter是一個(gè)用于跟蹤值出現(xiàn)次數(shù)的有序集合。它可以接收一個(gè)可迭代對(duì)象作為參數(shù),并生成一個(gè)字典,其中包含每個(gè)元素作為鍵,其計(jì)數(shù)作為值。

2. 統(tǒng)計(jì)列表或字符串中元素的出現(xiàn)次數(shù)

示例代碼:

from collections import Counter

lst = [1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4]
counter = Counter(lst)
print(counter)

# 輸出結(jié)果:是一個(gè)類似字典的一個(gè)對(duì)象
# Counter({1: 3, 2: 3, 3: 2, 4: 2, 5: 1})

3. 獲取出現(xiàn)頻率最高的元素

示例代碼:

from collections import Counter

lst = [1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4]
counter = Counter(lst)
most_common = counter.most_common(2)
print(most_common)

# 輸出結(jié)果:
# [(1, 3), (2, 3)]

4. 合并多個(gè)Counter對(duì)象

示例代碼:

from collections import Counter

counter1 = Counter([1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4])
counter2 = Counter([1, 2, 3, 4, 5, 6, 7])
combined = counter1 + counter2
print(combined)

# 輸出結(jié)果:
# Counter({1: 4, 2: 4, 3: 3, 4: 3, 5: 2, 6: 1, 7: 1})

5. 排序Counter對(duì)象

示例代碼:

from collections import Counter

lst = [1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4]
counter = Counter(lst)
sorted_counter = counter.most_common()
print(sorted_counter)

# 輸出結(jié)果:
# [(1, 3), (2, 3), (3, 2), (4, 2), (5, 1)]

請(qǐng)記住,以上示例只是簡(jiǎn)要說明該章節(jié)的內(nèi)容。在實(shí)際應(yīng)用中,你可以根據(jù)自己的需求和具體情況來進(jìn)一步優(yōu)化和擴(kuò)展代碼示例。希望這些示例能夠?qū)δ愕膶W(xué)習(xí)和應(yīng)用提供一些啟發(fā)!如果你有任何更具體的問題,我們很樂意幫助你解答。

三、defaultdict類的使用

1. defaultdict類的定義和特點(diǎn)

defaultdict是collections庫中的一個(gè)字典子類,它是用來創(chuàng)建具有默認(rèn)值的字典。與普通字典不同,當(dāng)我們?cè)L問一個(gè)不存在的鍵時(shí),defaultdict會(huì)自動(dòng)為該鍵分配一個(gè)默認(rèn)值。

2. 創(chuàng)建具有默認(rèn)值的字典

示例代碼:

from collections import defaultdict

# 創(chuàng)建一個(gè)空的defaultdict,指定默認(rèn)值為0

d = defaultdict(int)

# 訪問一個(gè)不存在的鍵,則會(huì)自動(dòng)分配默認(rèn)值0

print(d['a'])
print(d['b'])
print(d['c'])

輸出結(jié)果:
0
0
0

3. 處理字典中不存在的鍵

示例代碼:

from collections import defaultdict

# 創(chuàng)建一個(gè)defaultdict,并指定默認(rèn)值為字符串"Undefined"

d = defaultdict(lambda: "Undefined")

# 訪問一個(gè)不存在的鍵,則會(huì)自動(dòng)分配默認(rèn)值"Undefined"

print(d['name'])
print(d['age'])

輸出結(jié)果:
Undefined
Undefined

4. defaultdict與其他數(shù)據(jù)結(jié)構(gòu)的結(jié)合應(yīng)用

示例代碼:

from collections import defaultdict

創(chuàng)建一個(gè)defaultdict,將每個(gè)字母作為鍵,對(duì)應(yīng)的值為一個(gè)列表

d = defaultdict(list)

將一些值添加到列表中

d['a'].append(1)
d['a'].append(2)
d['b'].append(3)

輸出結(jié)果

print(d)

輸出結(jié)果:
defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3]})

在上述示例中,我們通過defaultdict類創(chuàng)建了具有默認(rèn)值的字典,并展示了其處理不存在的鍵的功能。通過合理設(shè)置指定的默認(rèn)值,defaultdict在處理字典中不存在的鍵時(shí)能夠提供更好的靈活性和方便性。你可以根據(jù)具體的需求和應(yīng)用場(chǎng)景,調(diào)整和擴(kuò)展這些示例代碼,以便更好地利用defaultdict類實(shí)現(xiàn)你的功能。

四、deque類的詳細(xì)使用

deque(雙端隊(duì)列)是collections庫中的一個(gè)類,它是一個(gè)線程安全、可以在兩端進(jìn)行高效插入和刪除操作的數(shù)據(jù)結(jié)構(gòu)。deque類實(shí)現(xiàn)了類似列表的功能,但在處理頻繁的首尾插入和刪除時(shí)更加高效。

1. 創(chuàng)建deque對(duì)象

可以通過引入collections庫并調(diào)用deque類來創(chuàng)建deque對(duì)象??梢栽趧?chuàng)建時(shí)指定初始元素。示例代碼:

from collections import deque

# 創(chuàng)建空的deque對(duì)象
d = deque()

# 創(chuàng)建帶有初始元素的deque對(duì)象
d = deque([1, 2, 3])

2. 基本操作

deque對(duì)象支持類似列表的基本操作,如索引、切片、追加、插入、刪除等。示例代碼如下:

from collections import deque

# 創(chuàng)建一個(gè)deque對(duì)象
d3 = deque([1, 2, 3, 4, 5])

# 訪問元素
print(d3[0])  # 輸出第一個(gè)元素
# 1

(1)追加元素到隊(duì)尾:

d3.append(6)
print(d3)

deque([1, 2, 3, 4, 5, 6])

(2)追加元素到隊(duì)首:

d3.appendleft(0)
print(d3)

deque([0, 1, 2, 3, 4, 5, 6])

(3)彈出隊(duì)尾元素

d3.pop()
print(d3)
d3.pop()
print(d3)

deque([0, 1, 2, 3, 4, 5])

(4)彈出隊(duì)首元素

d3.popleft()
print(d3)

deque([1, 2, 3, 4, 5])

(5)在指定位置插入元素

d3.insert(2, 100)
print(d3)

deque([1, 2, 100, 3, 4, 5])

(6)移除指定元素

d3.remove(3)
print(d3)

deque([1, 2, 100, 4, 5])

3. 旋轉(zhuǎn)操作

deque對(duì)象可以進(jìn)行旋轉(zhuǎn)操作,可以將隊(duì)尾的元素移動(dòng)到隊(duì)首或者將隊(duì)首的元素移動(dòng)到隊(duì)尾。示例代碼:

from collections import deque

# 創(chuàng)建一個(gè)deque對(duì)象

d = deque([1, 2, 3, 4, 5])

# 旋轉(zhuǎn)操作,將隊(duì)尾元素移動(dòng)到隊(duì)首

d.rotate(1)
print(d)

# 旋轉(zhuǎn)操作,將隊(duì)首元素移動(dòng)到隊(duì)尾

d.rotate(-1)
print(d)


# deque([5, 1, 2, 3, 4])
# deque([1, 2, 3, 4, 5])

4. 手動(dòng)實(shí)現(xiàn)一個(gè)雙端隊(duì)列

可以自己對(duì)deque進(jìn)行封裝,實(shí)現(xiàn)一個(gè)隊(duì)列,如下所示:

from collections import deque


class MyQueue:
    """
    使用 collections.deque 可以迅速實(shí)現(xiàn)一個(gè)隊(duì)列
    """

    def __init__(self):
        self.items = deque()

    def append(self, val):
        return self.items.append(val)

    def pop(self):
        return self.items.popleft()

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

    def empty(self):
        return len(self.items) == 0

    def front(self):
        return self.items[0]

通過以上示例代碼,我們可以看到deque類的基本操作和使用方法。deque對(duì)象可以高效地進(jìn)行隊(duì)首和隊(duì)尾的插入和刪除操作,是處理隊(duì)列數(shù)據(jù)的理想選擇。你可以根據(jù)具體的需求和場(chǎng)景調(diào)整和擴(kuò)展這些示例代碼,以便更好地應(yīng)用deque類的強(qiáng)大功能。

總結(jié)

通過本文的探索與示例,讀者可以更好地理解和掌握collections庫中Counter和defaultdict類的使用方法。這些強(qiáng)大的工具類可以極大地提高編程過程的效率,并為處理計(jì)數(shù)、統(tǒng)計(jì)和字典操作提供便利。希望本文能夠給讀者帶來啟發(fā),并激發(fā)更多關(guān)于collections庫的學(xué)習(xí)與實(shí)踐。

責(zé)任編輯:趙寧寧 來源: python學(xué)習(xí)之旅
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)