Python標準庫 collections,你用過嗎?

2021-01-07 Python之王

@Author: rusen 參看官方文檔

計數器(counter)以字典的形式返回序列中各個字符出現的次數,值為key,次數為value

Counter是對字典類型的補充,用於追蹤值得出現次數 ps:具備字典的所有功能 + 自己的功能

import collections

counter_test = collections.Counter("asfafjhadgkhjkgfjhgfjhaghdg")

print(counter_test)

Counter({'h': 5, 'g': 5, 'a': 4, 'f': 4, 'j': 4, 'd': 2, 'k': 2, 's': 1})

數量從大到小排列,獲取前N個元素

# most_common(N)數量從大到小排列,獲取前N個元素

counter_test.most_common(3)

[('h', 5), ('g', 5), ('a', 4)]

列出所有不同的元素並排序

# sorted()列出所有不同的元素並排序

sorted(counter_test)

['a', 'd', 'f', 'g', 'h', 'j', 'k', 's']

轉換成字符串

# 轉換成字符串

''.join(sorted(counter_test.elements()))

'aaaaddffffggggghhhhhjjjjkks'

# 取得元素重複次數的值

counter_test['a']

4

update()更新計數器

# update()更新計數器,其實就是增加;如果原來沒有,則新建,如果有則加一

d = collections.Counter('simsalabim')

counter_test.update(d)

print(counter_test)

Counter({'a': 6, 'h': 5, 'g': 5, 'f': 4, 'j': 4, 's': 3, 'd': 2, 'k': 2, 'i': 2, 'm': 2, 'l': 1, 'b': 1})

# elements()取得計數器中的所有元素,註:此處非所有元素集合,而是包含所有元素集合的迭代器

counter_test = collections.Counter('abcabc')

sorted(counter_test.elements())

['a', 'a', 'b', 'b', 'c', 'c']

# subtract()相減,原來的計數器中的每一個元素的數量減去後添加的元素的數量

counter_test = collections.Counter('which')

print(counter_test)

counter_test.subtract('watch')

print(counter_test)

Counter({'h': 2, 'w': 1, 'i': 1, 'c': 1})Counter({'h': 1, 'i': 1, 'w': 0, 'c': 0, 'a': -1, 't': -1})

有序字典(orderedDict)

from collections import OrderedDict

dic = OrderedDict()

dic['k1'] = 'v1'

dic['k2'] = 'v2'

dic['k3'] = 'v3'

print(dic)

OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

# 得字典所有的鍵

print(dic.keys())

odict_keys(['k1', 'k2', 'k3'])

# 取得字典所有值

print(dic.values())

odict_values(['v1', 'v2', 'v3'])

# items() 方法以列表返回可遍歷的(鍵, 值) 元組數組

print(dic.items())

odict_items([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

#pop()方法,刪除指定的鍵值

dic.pop('k1')

print(dic)

OrderedDict([('k2', 'v2'), ('k3', 'v3')])

#item()方法,默認刪除字典最後一個元素

dic.popitem()

print(dic)

OrderedDict([('k2', 'v2')])

# move_to_end('k')方法將指定鍵值一道最後

dic.move_to_end('k2')

print(dic)

OrderedDict([('k2', 'v2')])

# update()更新字典

dic.update({'k1':'v1111','k10':'v10'})

print(dic)

OrderedDict([('k2', 'v2'), ('k1', 'v1111'), ('k10', 'v10')])

默認字典(defaultdict)

#導入collections模塊

import collections

my_dict = collections.defaultdict(list)

my_dict['k1'].append('v1')

print(my_dict)

defaultdict(<class 'list'>, {'k1': ['v1']})

# 練習:元素分類

# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],

# 將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。

# 即: {'k1': 大於66 , 'k2': 小於66}

### 1、不用默認指點的寫法要判斷字典中是否已有{'k1':[]}

all_list = [11,22,33,44,55,66,77,88,99,90,]

dic = {}

for i in all_list:

if i > 66:

if"k1"in dic.keys():

dic['k1'].append(i)

else:

dic['k1'] = [i,]

else:

if"k2"in dic.keys():

dic['k2'].append(i)

else:

dic['k2'] = [i,]

print(dic)

### 2、默認字典

all_list = [11,22,33,44,55,66,77,88,99,90,]

dic = collections.defaultdict(list)

for i in all_list:

if i > 66:

dic['k1'].append(i)

else:

dic['k2'].append(i)

print(dic)

{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})

可命名元組(namedtuple)

### 根據nametuple可以創建一個包含tuple所有功能以及其他功能的類型。

from collections import namedtuple #創建(給元組命名)

Mytuple = namedtuple('Mytuple',['x','y','z'])

obj = Mytuple(11,22,33) #通過x,y,z取得元組的值

print(obj.x )

print(obj.y )

print(obj.z )

112233

雙向隊列(deque)

from collections import deque #創建雙向隊列

d = deque()

d.append('1')

d.append('2')

# append()向隊列中插入數據(從右邊插入)

d.append('3')

print(d)

deque(['1', '2', '3'])

# appendleft()向隊列中插入數據(從左邊插入)

d.appendleft('4')

print(d)

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

## clear()清空隊列

d.clear()

print(d)

deque([])

# count()計數

d.append('1')

print(d)

d.count('1')

deque(['1'])

1

# extend()從右邊向隊列添加額外元素

d.extend(['qq','ww','ee'])

print(d)

deque(['1', 'qq', 'ww', 'ee'])

## extendleft()從左邊向隊列添加元素

d.extendleft(['qq','ww','ee'])

print(d)

deque(['ee', 'ww', 'qq', '1', 'qq', 'ww', 'ee'])

# index()取得元素下標

d.index('1')

3

# insert()指定位置插入元素

d.insert(1,'nn')

print(d)

deque(['ee', 'nn', 'ww', 'qq', '1', 'qq', 'ww', 'ee'])

# pop()從右邊移除一個元素

d.pop()

print(d)

deque(['1','nn'])

deque(['ee', 'nn', 'ww', 'qq', '1', 'qq', 'ww'])

deque(['1', 'nn'])

# popleft()從左邊移除一個元素

d.popleft()

print(d)

deque(['nn', 'ww', 'qq', '1', 'qq', 'ww'])

# remove()移除指定元素

d.remove('1')

print(d)

deque(['2'])

deque(['nn', 'ww', 'qq', 'qq', 'ww'])

deque(['2'])

# reverse()反轉隊列

print(d)

d.reverse()

print(d)

deque(['2','1'])

deque(['nn', 'ww', 'qq', 'qq', 'ww'])deque(['ww', 'qq', 'qq', 'ww', 'nn'])deque(['2', '1'])

## rotate()將右邊指定的元素個數移到隊列左邊

d.append('4')

d.append('5')

d.append('6')

print(d)

d.rotate(3)

print(d)

deque(['ww', 'qq', 'qq', 'ww', 'nn', '4', '5', '6'])deque(['4', '5', '6', 'ww', 'qq', 'qq', 'ww', 'nn'])

單向隊列(先進先出 FIFO )

import queue # 創建單向隊列

>>> q = queue.Queue()

1.添加元素

>>> q.put('11')

>>> q.put('22')

2.qsize()獲取隊列中元素個數

>>> q.qsize()

2

3.get()取得元素(先進先出)

>>> q.get()

11

>>> q.get()

22

相關焦點

  • 【Python基礎】Python之collections庫-Counter
    collections模塊實現了特定目標的容器,以提供Python標準內建容器dict ,list , set , 和tuple的替代選擇。通俗說法:Python內置的數據類型和方法,collections模塊在這些內置類型的基礎提供了額外的高性能數據類型,比如最常用的統計詞頻most_common()函數,又如基礎的字典是不支持順序的,collections模塊的OrderedDict類構建的字典可以支持順序,collections
  • 【萬字長文詳解】Python庫collections,讓你擊敗99%的Pythoner
    collections庫實現了特定目標的容器,以提供Python標準內建容器 dict , list , set , 和 tuple 的替代選擇。英文文檔:https://docs.python.org/3/library/collections.html#module-collections3、模塊子類用collections.
  • 四種高性能數據類型,Python collections助你優化代碼、簡潔任務
    其中表現最好的一個就是 Python 內置的 collections 模塊了。一般而言,Python 中的 collections 模塊是用於存儲列表、字典、元組以及集等數據集合的容器。這些容器嵌入在 Python 中,可以實現開箱即用。collections 模塊提供了額外的高性能數據類型,它們可以優化代碼,讓一些任務變得更加簡潔。
  • Python的collections原來這麼好用!
    collections是實現了特定目標的容器,以提供Python標準內建容器 dict , list , set , 和 tuple 的替代選擇。為了讓大家更好的認識,本文詳細總結collections的相關知識,一起來學習吧!collections模塊:實現了特定目標的容器,以提供Python標準內建容器 dict、list、set、tuple 的替代選擇。Counter:字典的子類,提供了可哈希對象的計數功能。defaultdict:字典的子類,提供了一個工廠函數,為字典查詢提供了默認值。
  • python進階,詳解collections工具庫!
    作者:梁唐來源:早起Python大家好,今天為大家介紹python當中一個很好用也是很基礎的工具庫,叫做collections。collection在英文當中有容器的意思,所以顧名思義,這是一個容器的集合。這個庫當中的容器很多,有一些不是很常用,本篇文章選擇了其中最常用的幾個,一起介紹給大家。
  • wxpy庫+Pyecharts庫:用Python對微信好友進行數據分析
    本文結構:一、前言二、Python庫簡單介紹wxpy庫Pyechats庫re庫jieba庫和collections庫三、分析結果和代碼展示1、數據準備導入需要的Python庫使用wxpy庫登錄微信整合數據2、數據分析微信好友的男女比例微信好友的省份分布微信好友的城市分布微信好友個性籤名分析一、前言之前在某個微信公眾號上貌似看到過一個文章
  • 一文看懂Python collections模塊的高效數據類型
    一般來講,python的collections是用於存儲數據集合(比如列表list, 字典dict, 元組tuple和集合set)的容器。這些容器內置在Python中,可以直接使用。該collections模塊提供了額外的,高性能的數據類型,可以增強你的代碼,使事情變得更清潔,更容易。讓我們看一看關於集合模塊最受歡迎的數據類型以及如何使用它們的教程!
  • Python 這3種超方便的容器你都用過嗎?
    初學python時,遇到各類數據結構都會習慣性的想到列表。由於py如果列表推導式用的再熟練一些,那個感覺簡直是會上癮的。直到我認識了collections之後,這種深深陶醉的感覺被徹底擊碎。原來,python還有這麼多強大的內置容器!Collections模塊是python的內置模塊之一,提供了很多容器類型。按照官方文檔介紹,它被用作是對python通用內置類型(list、dict、set、tuple)的一個替代。
  • Python開發者必知的 11 個 Python GUI 庫,你用過幾個?
    Python開發者必知的 11 個 Python GUI 庫,你用過幾個? 當你使用python編寫應用程式時,你就一定要使用GUI。Python GUI的選擇有很多。目前來說,Python GUI程序庫有30多個跨平臺框架。現在就列出其我認為最好的11個.
  • 這些Python代碼技巧,你肯定還不知道
    collections 模塊:https://docs.python.org/3/library/collections.htmlfrom collections import OrderedDict,
  • python的常用擴展庫以及使用方式
    一、常用庫(標準庫+擴展庫)標準庫 說明math 數學模塊random 隨機數以及隨機化相關模塊datetime
  • 用Python 做機器學習不得不收藏的重要庫
    數據科學家也會用python作為連接自身工作與WEB 應用程式/生產環境集成中。 Python在機器學習領域非常出色。它具有一致的語法、更短的開發時間和靈活性,非常適合開發能夠直接插入生產系統的複雜模型和預測引擎。 Python的一個最大的資產是其廣泛的庫。 庫是一組用給定語言編寫的程序和功能的集合。
  • 如何在Python 3中使用collections模塊
    collections模塊能夠幫助我們高效地填充和操作數據結構。在本教程中,我們將通過collections模塊中的三個類來幫助你處理元組、字典和列表。我們將使用namedtuples來創建帶有命名欄位的元組,使用defaultdict來在字典中精確地分組信息,以及使用deque來高效地向一個類列表對象的每一邊添加元素。
  • 如何在python中引入高性能數據類型?
    作者|skura 來源|AI開發者 python 就像一件藝術珍藏品!python 最大的優點之一是它可以廣泛地選擇模塊和包。它們將 python 的功能擴展到許多流行的領域,包括機器學習、數據科學、web 開發、前端等等。其中最好的一個優點是 python 的內置 collections 模塊。
  • Python 200個標準庫匯總!
    struct:將字節解析為打包的二進位數據codecs:註冊表與基類的編解碼器數據類型datetime:基於日期與時間工具calendar:通用月份函數collections:容器數據類型collections.abc:容器虛基類heapq:堆隊列算法bisect:數組二分算法array:高效數值數組
  • Python——詳解collections工具庫,一篇文章全搞定
    今天為大家介紹Python當中一個很好用也是很基礎的工具庫,叫做collections。collection在英文當中有容器的意思,所以顧名思義,這是一個容器的集合。這個庫當中的容器很多,有一些不是很常用,本篇文章選擇了其中最常用的幾個,一起介紹給大家。
  • 最好用的20個python庫,這些你知道嗎?
    去年,我們曾發表一篇博客文章 Top 15 Python Libraries for Data Science in 2017,概述了當時業已證明最有幫助的Python庫。今年,我們擴展了這個清單,增加了新的Python庫,並重新審視了去年已經討論過的 Python 庫,重點關注了這一年來的更新。我們的選擇實際上包含了 20 多個庫,因為其中一些庫是相互替代的,可以解決相同的問題。
  • 5個奇妙的Python庫
    Python為各種簡單和困難的任務提供了大量的庫。大多數人都知道類似Pandas,Numpy,Matplotlib,Seaborn,OpenCV,Plotly這樣的庫,還有很多其他在機器學習中使用的庫。但是對於很多小的需求,python同樣有很多奇妙的庫。本文將分享一些在項目中遇到的一些庫,這些庫具有很高的可移植性,對於每個庫我都將用一個代碼段來介紹。
  • 每個python人都離不開的12個python庫
    如果說python能取得今天的成就,一方面是它簡介的語法,更重要的一方面就是它豐富的第三方庫,可以毫不誇張的說,只要你能想到的任何一個功能模塊,都有對應的python庫,可以說正是因為有了豐富的python庫,python才發展得如此迅速,下面我們來看看python人最常用的20個python
  • 2019 必知的 10 大頂級 python 庫
    如果你目前正在使用 python 進行機器學習項目,那麼你可能聽說過這一個流行的開源庫,那就是 TensorFlow。這個庫是由 Google 與 Brain Team 合作開發的,幾乎每一個 Google 的機器學習應用程式都用到了 TensorFlow。