-
nametuple
1,可以創建類對象
查看全部 -
collections模塊
查看全部 -
""" ChainMap將多個字典連接起來,讓我們可以很方便的遍歷這些字典 其子方法: items():?遍歷這個字典 new_child():?添加字典元素 maps屬性:以列表的形式將字典數據展示出來 """ from?collections?import?ChainMap if?__name__?==?"__main__": ????user_dict1?=?{"a":?"AA",?"b":?"BB"} ????user_dict2?=?{"b":?"BBB",?"c":?"CC",?"d":?"DD"} ????for?key,?value?in?user_dict1.items():??#?遍歷字典 ????????print(key,?value) ????for?key,?value?in?user_dict2.items(): ????????print(key,?value) ????print("-----------------") ????new_dict?=?ChainMap(user_dict1,?user_dict2) ????for?key,value?in?new_dict.items(): ????????print(key,?value) ????print(new_dict) ????print(new_dict["c"])???#?取值key對應的值 ????new_dict.new_child({"aa":"AAAAA",?"bb":"BBBBB"}) ????print(new_dict) ????print(new_dict.maps)??#?以列表的形式將字典數據展示出來 ????new_dict.maps[0]["a"]?=?"Hello?World"??#?將字典的第0個元素的a的值變為Hello?World ????print(new_dict)
查看全部 -
""" OrderedDict是dict的子類 OrderedDict?保證添加的順序一致,先添加的在前面,后添加的在后面 python2與python3結果不一致,注意版本問題 在python3中,OrderedDict和dict是一樣的 在python2和python3中,OrderedDict都是一樣的,建議使用OrderedDict OrderedDict的子方法: clear():?清除 pop(key):?移除指定key對應的元素 popitem():?移除最后一個元素 move_to_end(key,?last):??將key對應的元素移動到last指定的位置 """ from?collections?import?OrderedDict if?__name__?==?"__main__": ????user_dict?=?dict() ????user_dict["b"]?=?"小二" ????user_dict["g"]?=?"田七" ????user_dict["c"]?=?"張三" ????user_dict["d"]?=?"李四" ????user_dict["a"]?=?"劉一" ????user_dict["f"]?=?"趙六" ????user_dict["e"]?=?"王五" ????print(user_dict) ????user_dict?=?OrderedDict() ????user_dict["b"]?=?"小二" ????user_dict["g"]?=?"田七" ????user_dict["c"]?=?"張三" ????user_dict["d"]?=?"李四" ????user_dict["a"]?=?"劉一" ????user_dict["f"]?=?"趙六" ????user_dict["e"]?=?"王五" ????print(user_dict) ????print(user_dict.move_to_end("b"))??#?將key為b對應的元素移動到最后位置 ????print(user_dict) ????print(user_dict.pop("a"))??#?移除key為a的元素 ????print(user_dict.popitem())???#?移除最后一個 ????print(user_dict)
查看全部 -
""" Counter()函數接收一個可以迭代的對象,這個對象可以是列表,元組,字典,字符串等,返回一個字典 其子方法: update():?追加 most_common(n):??統計出出現次數最多的前n個元素 """ from?collections?import??Counter if?__name__?==?"__main__": ????users?=?["李四",?"張三",?"李四",?"王五",?"張三",?"田七"] ????user_counter?=?Counter(users)???#?統計 ????print(user_counter) ????str_counter?=?Counter("ajkdihtdajkgybuatyaytayrtvaunywywghab")???#?統計字符串 ????print(str_counter) ????str_counter.update("agafadadaaaaaassdss")??#?追加 ????print(str_counter) ????user_counter.update(str_counter)??#?追加統計 ????print(user_counter) ????print(str_counter.most_common(4))???#?返回出現次數最多的前4個元素
查看全部 -
""" deque()?雙端隊列,是一個容器?,它接收一個可迭代的對象,這個對象可以是列表,元組,字典等 用來保存同類型的內容,可以把它當作一個對象來處理 deque包含的方法: append():?添加數據到隊列 appendleft():?添加數據到隊列頭部 clear():?清空隊列數據 copy():?返回一個淺拷貝,淺拷貝只拷貝元素 count():?返回隊列中元素的數量 extend():?將兩個deque合并為一個 extendleft():?從左邊進行合并 index():?查找元素 insert():?在指定位置插入元素 pop():?移除隊列的尾部元素 popleft():?移除隊列的頭部元素 remove():?刪除某個元素 reverse():?將隊列反轉 deque?是線程安全的,由GIL保護 list?不是線程安全的 """ from?collections?import?deque import?copy??#?深拷貝 if?__name__?==?"__main__": ????user_list?=?["張三","李四","王五",?"趙六"] ????user_name?=?user_list.pop()??#?隊尾出隊 ????print(user_name,?user_list) ????print("----------------------------") ????user_tuple?=?deque(("張三",?"李四"))???#?初始化 ????print(user_tuple) ????user_list?=?deque(["趙六",?"王八"]) ????print(user_list) ????user_dict?=?deque({ ????????"蘋果":?12, ????????"雪梨":?15 ????}) ????print(user_dict) ????print("-------------------------") ????user_info_list?=?deque(["依依",?23,?171]) ????user_info?=?("C罩杯",?"北京大學",?"中國北京") ????user_info_list.append(user_info)???#?添加元素 ????print(user_info_list) ????print("--------------") ????name_deque?=?deque(["蘋果",?"香蕉",?"橘子"]) ????name_deque.append("芒果")???#?添加元素到隊列尾部 ????name_deque.appendleft("哈密瓜")??#?添加元素到隊列頭部 ????print(name_deque) ????fruits_deque?=?name_deque.copy()???#?淺拷貝 ????print(fruits_deque) ????print(id(fruits_deque)?,?id(name_deque)) ????name_deque[1]?=?"西瓜" ????print(fruits_deque,?name_deque) ????print("------------------------") ????color_deque?=?deque(["yellow","red",?"blue",?"black",?"red"]) ????print(color_deque) ????print("元素個數:",color_deque.count("red")) ????color_deque.pop()???#?隊尾元素出隊 ????print(color_deque) ????color_deque.popleft()??#?隊列頭部元素出隊 ????print(color_deque) ????color_deque.insert(0,?"green")??#?隊列的0號位置插入元素 ????print(color_deque) ????color_deque.remove("red")??#?移除值為?red的元素 ????print(color_deque) ????color_deque.reverse()??#?反轉隊列 ????print(color_deque) ????print(color_deque[1])???#?獲取下標為1的元素
查看全部 -
dict 設置默認值的方法:
1、可以通過dict.setdefault(key,default_value)
2、通過defaultdict(可調用的對象)
????可調用的對象:list、str、int、dict、函數等
from?collections?import??defaultdict def?gen_default(): ????return?{ ????????"name":?"", ????????"nums":?0 ????} if?__name__?==?"__main__": ????#?統計出現的次數 ????user_dict?=?{}??#空字典 ????users?=?["name1",?"name2",?"name3",?"name1",?"name2",?"name1"?] ????print("方法1:") ????for?user?in?users: ????????if?user?not?in?user_dict:??#?判斷是否存在 ????????????user_dict[user]?=?1 ????????else: ????????????user_dict[user]?+=?1 ????print(user_dict) ????print("方法2:") ????for?user?in?users: ????????user_dict.setdefault(user,?0) ????????user_dict[user]?+=?1 ????print(user_dict) ????print("--------------------------------------") ????default_dict1?=?defaultdict(list)??#?defaultdict()函數接受一個可調用的對象,這個對象可以是list,str,int,dict等。 ????print(default_dict1) ????#?統計顏色出現的次數 ????default_dict2?=?defaultdict(int) ????colors?=?["red",?"black",?"red",?"blue",?"yellow",?"green",?"green"] ????for?color?in?colors: ????????default_dict2[color]?+=?1 ????print(default_dict2) ????print("----------------------") ????default_dict3?=?defaultdict(gen_default) ????default_dict3["group"] ????print(default_dict3) ????user_dict?=?{ ????????"name":?"依依", ????????"age":?24, ????????"height":?171, ????????"cupSize":?"B罩杯", ????????"hibbos":?{ ????????????"eat":?["火鍋",?"香蕉"], ????????????"sports":?["跑步","游泳"] ????????} ????} ????print(user_dict)
查看全部 -
namedtuple中的兩個方法: (1)?_make():?該方法接收一個可迭代的對象,這個對象可以是元組,列表,字典等,其中的參數要一一對應(數量,屬性) (2)?_asdict():該方法可以將元組(tuple)轉化為字典(dict)
查看全部 -
def ask(*args, **kwargs):
? ? ? pass
函數參數說明:*args參數可以接收元組(tuple)
**kwargs參數接收的是字典(key-value)形式的參數
#?函數參數?*args接收元組參數,?**kwargs接收字典參數 def?ask(*args,?**kwargs):? ????print(type(args)) ????print(type(kwargs)) ????print(args,?kwargs) if?__name__?==?"__main__": ????ask("六月飛雪",?6)???#?元組參數 ???ask(name?=?"劉豆豆",?age?=?22)???#?字典參數
namedtuple中的_make()函數接收一個可迭代的對象,這個對象可以是元組,列表,字典,其參數一一對應。
from?collections?import?namedtuple if?__name__?==?"__main__": ????User?=?namedtuple("User",?["name",?"age",?"height",?"cupSize",?"edu"])??#?使用namedtuple就相當于創建了一個User類 ???user?=?User(name="彤彤",?age=23,?height=172,?cupSize="C罩杯",?edu?=?"清華大學") ????print(user.name,?user.age,?user.height,user.cupSize) ????girl_tuple1?=?("依依",?22,?171,?"B罩杯",?"北京大學") ????user1?=?User(*girl_tuple1)???#?將元組作為一個參數傳遞給函數,其前面加個星號即可 ???print(user1.name,?user1.age,?user1.height,?user1.cupSize) ????girl_tuple2?=?("倩倩",?23,?171,?"B罩杯") ????user2?=?User(*girl_tuple2,?"北京大學")???#?元組作為參數傳遞 ???print(user2.name,?user2.age,?user2.height,?user2.cupSize,?user2.edu) ????print("-------------------------------") ????#?字典 ????user_dict?=?{ ????????"name":"悠悠", ????????"age":?24, ????????"height":?171, ????????"cupSize":?"C罩杯" ????} ????user3?=?User(**user_dict,?edu="南開大學")???#?字典作為參數傳遞,其前加兩個星號 ???print(user3.name,?user3.age,?user3.height,?user3.cupSize,?user3.edu) ????user4?=?User._make(girl_tuple1)??#元組作為其參數?參數一定要對應,否則報錯 ????print(user4.name,?user4.age,?user4.height,?user4.cupSize,?user4.edu) ????user_list?=?["可可",?24,?172,?"B罩杯",?"浙江大學"] ????user5?=?User._make(user_list)???#?列表作為其參數???使用??_make()函數你不需要關心數據類型,只要傳遞一個可迭代的對象即可 ???print(user5.name,?user5.age,?user5.height,?user5.cupSize,?user5.edu) ????print("------------------") ????user_dict1?=?{ ????????"name":?"玉玉", ????????"age":?23, ????????"height":?173, ????????"cupSize":?"C罩杯", ????????"edu":?"武漢大學" ????} ????user6?=?User._make(user_dict1)???#?字典作為其參數,使用?_make()函數其參數是一個可迭代的對象,數據類型任意 ???print(user_dict1) ????print(user_dict1.values())
查看全部 -
tuple的子類namedtuple,使用namedtuple相當于定義了一個類。
可以將tuple作為參數傳遞給函數,只要在tuple名前面加一個星號(*)即可。
查看全部 -
tuple:元組,不可變,可迭代,可拆包
girl?=?("珊珊",?21,?170,?"B罩杯") name,age,height,cupSize?=?girl???#?元組拆包 print(name,?age,?height,?cupSize)
其不可變不是絕對的,當元組中包含數組或其他可變數據對象時,就可以改變元組的內容。
tuple比list好,原因:
其不可變性,可以保證在編譯時確定其值,使得性能優化,線程安全,可以作為dict的key,具有拆包特性
如果要拿C語言來類比,Tuple對應的是struct(結構體),而list對應的是array(數組)
查看全部 -
collections模塊
查看全部 -
tuple比list好的地方
查看全部 -
拆包的用法2
查看全部 -
拆包的用法
查看全部
舉報