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