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