Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
nametuple
是tuple擴展子類,命名元組,其實本質(zhì)上簡單類對象
from collections import namedtupleinfo = namedtuple("Info", ['name', 'age', 'height']) # 賦值,是不是有點像面向?qū)ο笾袑嵗兞糠绞?info.name = "北門吹雪" info.age = 18 info.height = 175# 訪問 print(info.name)其實本質(zhì)上和下面方式一樣
class Info:def __init__(self):self.name = Noneself.age = Noneself.height = Nonepassinfo = Info() # 賦值 info.name = "北門吹雪" info.age = 18 info.height = 175 # 訪問 print(info.name)相關(guān)方法
1. _make 初始化賦值,?必須長度一致
from collections import namedtupleinfo = namedtuple("Info", ['name', 'age', 'height'])._make(["北門吹雪", 18, 175])# 訪問 print(info.name)2. _asdict 將nametuple對象轉(zhuǎn)換為字典對象,是個有序字典
from collections import namedtupleinfo = namedtuple("Info", ['name', 'age', 'height'])._make(["北門吹雪", 18, 175])# 訪問 print(info._asdict())
defaultdict
是dict的擴展類,訪問字典的key如果沒有則自動設(shè)置默認值,并添加進字典
info = dict() name = info.setdefault('name', "北門吹雪") print(name, info)from collections import defaultdict # 默認值必須是可迭代對象 info = defaultdict(lambda: "北門吹雪") name = info['name'] print(name, info)
deque
雙端隊列,?操作和list類似
list deque 推薦用來保存相同類似數(shù)據(jù),相關(guān)方法和list一致
特性:?deque是線程安全的,list不是線程安全,多線程編程則使用deque
from collections import deque names = deque() names.append("北門吹雪") names.append("QiNiuYun") names.insert(0, "今日頭條") print(names)
Queue
隊列(先進先出),通過 deque實現(xiàn)
核心兩個方法 put get,會堵塞
from queue import Queuemessage = Queue() # 放入數(shù)據(jù) message.put("北門吹雪") # 消費數(shù)據(jù) print(message.get())
Counter
對可迭代對象做統(tǒng)計出現(xiàn)個數(shù),直接返回統(tǒng)計結(jié)果,是dict的子類
from collections import Counter from random import randintnumbers = [randint(1, 5) for _ in range(20)] numbers_count = Counter(numbers) print(numbers_count)相關(guān)方法
1.?update 添加新的數(shù)據(jù)
from collections import Counter from random import randintnumbers = [randint(1, 5) for _ in range(20)] numbers_count = Counter(numbers) print(numbers_count) # 添加新的數(shù)據(jù) numbers_count.update([randint(1, 10) for _ in range(20)]) print(numbers_count)2. most_common(N) 輸出出現(xiàn)次數(shù)當(dāng)前最多的前N個元素
from collections import Counter from random import randintnumbers = [randint(1, 5) for _ in range(20)] numbers_count = Counter(numbers) print(numbers_count) # 添加新的數(shù)據(jù) numbers_count.update([randint(1, 10) for _ in range(20)]) print(numbers_count)# 輸出出現(xiàn)次數(shù)當(dāng)前最多的前3個元素,返回列表 print(numbers_count.most_common(3))
OrderDict
繼承dict, 保持字典添加順序,具有dict所有方法
from collections import OrderedDictinfo = OrderedDict() # 填入數(shù)據(jù) info["name"] = "北門吹雪" info['age'] = 18 info['height'] = 175 print(info)其他方法
1. popitem 默認刪除最后的key:value,并返回
from collections import OrderedDictinfo = OrderedDict() # 填入數(shù)據(jù) info["name"] = "北門吹雪" info['age'] = 18 info['height'] = 175 # 返回元組形式 print(info.popitem('name'))2.?pop 必須傳入key,刪除key:value,返回value
from collections import OrderedDictinfo = OrderedDict() # 填入數(shù)據(jù) info["name"] = "北門吹雪" info['age'] = 18 info['height'] = 175# 返回age對應(yīng)的值 print(info.pop('age'))3.?move_to_end ??傳入key,將元素移到最后
from collections import OrderedDictinfo = OrderedDict() # 填入數(shù)據(jù) info["name"] = "北門吹雪" info['age'] = 18 info['height'] = 175# 移動數(shù)據(jù) info.move_to_end('age') print(info)?
arrary
只能存放一種類型的數(shù)組,這個數(shù)組高性能非常高,非常類似list除了只能存放一種類型數(shù)據(jù)
#標(biāo)識符 存放數(shù)據(jù)類型? 占用字節(jié)?
?
'u' Unicode字符 ? ?2
“L” 符號整數(shù) ?4
“L” 無符號整數(shù) 4
“q” 符號整數(shù) ?8
“q” 無符號整數(shù) 8
F ? ′浮點? ? ? ? ? ? ? ? ? ? ? 4
“D”? ? ? ? ? ? ?浮點? ? ? ? ? ? ? ? ? ? ? ?8
import arraynames = array.array("u") print(names.append("北")) print(names.append("門")) print(names.append("吹")) print(names.append("雪")) print(names) print(names[1])?
經(jīng)驗:
1.?這些數(shù)據(jù)類型基礎(chǔ)還是從list tuple set dict基本數(shù)據(jù)類型擴展而來,本質(zhì)上添加了一些特性
2.?不同的情況下選擇不同的數(shù)據(jù)結(jié)構(gòu)對數(shù)據(jù)進行處理
北門吹雪:?https://www.cnblogs.com/2bjiujiu/
轉(zhuǎn)載于:https://www.cnblogs.com/2bjiujiu/p/9141431.html
總結(jié)
以上是生活随笔為你收集整理的Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络学习之----Hopfield神
- 下一篇: 5- vue django restfu