python collections中收藏了什麼呢?嗯,是藝術,一種高效能資料型別藝術!
python的最大優勢之一是其廣泛的模組和軟體包支援。它們將python的功能擴充套件到了很多流行領域,包括機器學習,資料科學,web開發,前端等。其中python內建的collections 就是最好的模組之一。
一般而言,python中的collections是用於儲存資料集合(例如列表,字典,元組和集合)的容器。這些容器內建在python中,可以直接使用。
讓我們看一看有關collections模組最受歡迎的資料型別以及如何使用
(1) counter
counter是字典物件的子類。collections模組中的counter()函式引數是乙個可迭代的變數(iterable),如列表或元組,返回counter字典。字典的鍵是iterable的元素,每個鍵的值是iterable中的元素計數。
首先,讓我們從collections中匯入counter資料型別:
from collections import counter
要建立counter物件,就像任何其它物件類一樣,將其分配給乙個變數。傳給它的唯一引數必須是iterable.
lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = counter(lst)
print(counter)會得到一些類似於字典的內容:
counter()
你可以使用鍵訪問任何counter元素,如下所示。這和從標準python字典中提取元素的方式完全一致。
lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = counter(lst)
print(counter[1])
most_common()函式
counter物件最有用的功能是most_common()函式。應用於counter物件時,它返回n個最常見元素及其計數的列表,從最常見到最罕見排序。
lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = counter(lst)
print(counter.most_common(2))
上面的**列印出以下元組列表:
[(1, 7), (2, 5)]
每個元組的第乙個元素是列表中的元素,第二個元素是計數。這是一種快速簡便的方法,例如「獲取列表中最常見的前3個元素及其計數」。
要了解有關counter功能的更多資訊,請查閱官方文件。
(2) defaultdict
defaultdict完全就是乙個普通的python字典,除了額外的bonus: 當你試圖訪問乙個不存在的鍵,它不會報錯。
它使用預設值初始化鍵。預設值是根據建立defaultdict物件時作為引數傳遞的資料型別自動設定的。請看下面的**
from collections import defaultdict
names_dict = defaultdict(int)
names_dict["bob"] = 1
names_dict["katie"] = 2
sara_number = names_dict["sara"]
print(names_dict)
上面的示例中,int作為預設值傳遞給我們的defaultdict物件。接下來,為每個鍵定義值(「 bob」和「 katie」的數值)。但是在最後一行,我們嘗試訪問乙個尚未定義的鍵,即「 sara」鍵。
在普通字典中,這將引發錯誤。但是,defaultdict會自動為「 sara」初始化乙個新鍵,其值0對應我們的int資料型別。因此,最後一行列印出含有所有3個名字和相應值的字典。
defaultdict(, )
如果我們要用列表來初始化defaultdict,names_dict = defaultdict(list)會把「 sara」初始化為空列表,**將列印出以下內容:
defaultdict(, )
要了解有關defaultdict功能的更多資訊,請查閱官方文件。
(3) deque
collections庫的deque實現了相同功能的優化。該實現的主要功能是保持佇列大小,比如將佇列的最大長度設定為10,則deque根據fifo原理新增和刪除元素以保持最大長度為10。這是目前python中佇列的最佳實現。
讓我們從乙個例子開始。建立乙個deque物件,然後用從1到10的整數進行初始化。
from collections import deque
my_queue = deque(maxlen=10)
for i in range(10):
print(my_queue)
在上面的**中,我們首先初始化deque,指定我們希望它始終保持最大長度為10。然後,通過迴圈將值插入到佇列中。注意,填充佇列的功能與使用常規python列表的方式完全相同。最後,我們列印出結果。
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
由於佇列中有乙個maxlen=10,並且迴圈中新增了10個元素,因此佇列中包含了從1到10的所有數字。現在讓我們看看新增更多數字時會發生什麼。
for i in range(10, 15):
print(my_queue)
在上面的**中,我們在佇列中新增了另外5個元素,數字從11到15。但是我們的佇列有最大長度maxlen=10,因此必須刪除一些元素。由於佇列必須遵循fifo原則,因此它將精確地按照其插入順序刪除佇列中的前5個元素:[1, 2, 3, 4, 5]。列印語句的結果如下:
deque([6, 7, 8, 9, 10, 11, 12, 13, 14, 15], maxlen=10)
(4) namedtuple
在python中建立常規元組時,其元素是通用且未命名的。這迫使你必須記住每個元組元素的準確索引。namedtuple解決了這個問題。
namedtuple()返回元組中的每個位置的固定名稱和namedtuple物件的通用名字。要使用namedtuple,先為其建立乙個模板。下面的**建立乙個名為「 person」 的namedtuple模板,其屬性為「 name」,「 age」和「 job」。
from collections import namedtuple
person = namedtuple('person', 'name age job')
建立模板後,即可使用它建立namedtuple物件。讓我們為2個人建立namedtuple並列印
person = namedtuple('person', 'name age job')
mike = person(name='mike', age=30, job='data scientist')
kate = person(name="kate", age=28, job='project manager')
print(mike)
print(kate)
上面的**非常簡單—我們使用namedtuple 模板的所有屬性來初始化「person」 。上面的列印語句將給出以下結果:
person(name='mike', age=30, job='data scientist')
person(name='kate', age=28, job='project manager')
可見,namedtuples讓元組物件的使用,可讀性和組織更簡單了。
要了解namedtuple的更多資訊,請查閱官方文件。
python collections幾個高效能資料型別簡單介紹完啦,馬上試試吧。
原文:
藝術生作品欣賞
這個不錯 13號 怎麼說,這個的畫風更讓我喜歡,可愛,雖然看得出來畫的並不複雜,但是確實 估計不難,但是效果不錯,這就說明想法的重要吧 15號 很酷的風格,這個風格很帥,是可以動的,有出拳的動作,就是工程量大概會很大,但是效果完成的感覺確實也挺帥 29號 這個人的作品的互動做的比其他的人好,而且確實...
成武縣 成武縣第四屆少兒藝術作品展
活動地點 成武縣美術館展廳 如果說個人成長的腳印連在一起就是人生道路,那麼這一張張繪畫作品正是你們所思 所想 所夢。美術的俄世界是多彩而夢幻的,一比一世界中,包容了整個大自然的色彩 一思以創意中,蘊含著孩子們五金的情思。世界因為孩子們的描繪變得更加美麗,世界因為孩子們的想象而變得更加神奇。在這收穫與...
藝術和科技的融合,VR作品獲得全球數碼藝術大獎
the lumen prize exhibition每年舉辦一次,向全球徵集數碼藝術作品,作品經由電子數碼裝置創作而成是必備條件。精挑細選的獲獎新 藝術作品將在世界各地頂尖場館展出。the lumen prize曾經成功在美國紐約,中國香港,英國及歐洲等地進行巡迴展覽。獲得大獎的giampietro...