python高级语法-collections模块下几个新序列
生活随笔
收集整理的這篇文章主要介紹了
python高级语法-collections模块下几个新序列
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 很多乃至絕大多數(shù)時候list,set,dict是不錯的選擇,但是有些特殊情形下我們發(fā)現(xiàn)內(nèi)置的三種序列結(jié)構(gòu)不能方便地滿足我們的要求,這是collections模塊下的幾個新序列就有了用武之地。
- 這里只介紹基礎的用法。
1. namedtuple(命名元組)
這里個人覺得有點像c語言里面的結(jié)構(gòu)體。
創(chuàng)建和使用:
import collections # 利用namedtuple產(chǎn)生一個類,兩個參數(shù) 命名的名字,所含成員名字 Point = collections.namedtuple("Point", ['x', 'y']) # 用產(chǎn)生的類去實例化一個對象 p = Point(1, 2) print(p.x)2. deque(雙向隊列)
這種隊列拜托了隊列先進先出的一端原則。
創(chuàng)建和使用:
# 用列表來創(chuàng)建一個deque對象 q = collections.deque([0, 1, 2, 3, 4]) print(q) # 追加的兩種方式 q.appendleft("x") q.append("y") print(q)3. defaultdict(默認值字典)
眾所周知,一旦我們訪問字典中的某個key不存在字典中,那么程序就好崩潰,但是很多時候,我們不愿意為一個字典訪問加上try語句,這顯得很麻煩,我們希望沒有給定值但是訪問到的key可以正常有值,默認值字典應運而生。
創(chuàng)建和使用:
# d1是普通字典 d1 = {} # 給定默認值的函數(shù)是一個lambda表達式 fuc1 = lambda: "zc" d2 = collections.defaultdict(fuc1) d2["one"] = 1 print(d2["one"]) print(d2["hsjdbj"])但是我們將最后一句的d2換成d1,程序崩潰了。
4. Counter(計數(shù)器)
通過傳入可迭代對象創(chuàng)建,計數(shù)單元就是這個可迭代對象的最小單元。他會生成字典,key是計數(shù)單元,value是計數(shù)得到的數(shù)值。
創(chuàng)建和使用:
# 通過字符串創(chuàng)建 str1 = "cgukalbcklancl;wea'wec,w" c = collections.Counter(str1) print(c) str1 = ["zc", "nb"] c = collections.Counter(str1) print(c)5. OrderDict(有序字典)
這里指的是元素添加順序拜托了原本字典無序的規(guī)定,只有順序一致的字典才是相同的。
創(chuàng)建和使用:
# 創(chuàng)建一個字典對象 print("dict:") d1 = {} d1["a"] = "A" d1["b"] = "B" d1["c"] = "C" for k, v in d1.items():print(k, "---", v) # 創(chuàng)建一個有序字典對象 print("OrderDict:") d2 = collections.OrderedDict() d2["a"] = "A" d2["b"] = "B" d2["c"] = "C" for k, v in d2.items():print(k, "---", v) # 這里創(chuàng)建兩個內(nèi)容hed1和d2分別一樣的dict,但是改變了元素添加的書序 d3 = {} d3["a"] = "A" d3["c"] = "C" d3["b"] = "B" d4 = collections.OrderedDict() d4["a"] = "A" d4["c"] = "C" d4["b"] = "B" print(d1 == d3) print(d2 == d4)從結(jié)果看只要內(nèi)容相同,不論處理順序,兩個字典是相同的;但是,OrderDict來說則完全不同,它記住了元素添加順序。(不是修改順序)
總結(jié)
以上是生活随笔為你收集整理的python高级语法-collections模块下几个新序列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python高级语法-高阶函数之map的
- 下一篇: 微信小程序- 初试小程序之tabbar(