一、dict
-
key-value 鍵值對的數據的集合可變的,無序的,key不重復
-
定義d = dict()? 或者 d = {}dict(**kwargs) 使用 name=value對 初始化一個字典dict(iterable,**kwarg) 使用可迭代對象和 name=value對 構造字典,不過可迭代對象的元素必須是一個二元結構?d = dict(((1,’a’),(2,’b’))) 或者 d = dict(([1,’a’],[2,’b’]))dict(mapping,**kwarg) 使用一個字典構建另一個字典d = {‘a’:10,’b’:20,’c’:None,’d’:[1,2,3]}類方法 dict.fromkeys(iterable,value)d = dict.fromkeys(range(5))? ? ?–>? ? {0: None, 1: None, 2: None, 3: None, 4: None}d = dict.fromkeys(range(5),0)? ?–>? ?{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
-
訪問?d[key]:返回 key 對應的值 value;key 不存在拋出 KeyError 異常?get(key[,default]):返回 key 對應的值 value;key 不存在返回缺省值,如果沒有設置缺省值,返回 Nonesetdefault(key[,default]):返回 key 對應的值 value;key 不存在,添加 kv 對,value 為 default,并返回default,如果 default 沒設置,缺省值為 None
-
增加和修改d[key] = value將 key 對應的值修改為 valuekey 不存在添加新的 kv對update([other])? –> None? ? ? 使用另一個字典的 kv對 更新字典? ? ? key 不存在,就添加? ? ? key 存在,覆蓋已經存在的 key 對應的值? ? ? 就地修改
-
刪除?pop(key[,default])? ? ? key 存在,移除它,并返回它的 value? ? ? key 不存在,返回給定的 default? ? ? default 未設置,key 不存在則拋出 KeyError 異常?popitem()? ? ? ? 移除并返回一個任意的鍵值對? ? ? ? 字典為 empty,拋出 KeyError 異常clear()? ?清空字典? ?del 語句? ? ? ? del 看著像刪除一個對象,本質上減少了一個對象的引用,del 實際上刪除的是名稱,而不是對象
-
遍歷? ? ?遍歷 key? ? ?for k in d:? ? ? ? ? ? print(k)? ? ? for k in d.keys():? ? ? ? ? ? print(k)? ? ? ?遍歷 value? ? ? ? ? ?for k in d:? ? ? ? ? ? ? ?print(d[k])? ? ? ? ? ?for k in d.keys():? ? ? ? ? ? ? ? print(d.get(k))? ? ? ? ? ?for v in d.values():? ? ? ? ? ? ? ?print(v)? ? ? ? 遍歷 item,即 kv對? ? ? ? ? ? ? for item in d.items():? ? ? ? ? ? ? ? ? print(item)? ? ? ? ? ? ? for item in d.items():? ? ? ? ? ? ? ? ? print(item[0],item[1])? ? ? ? ? ? ? for k,v in d.items():? ? ? ? ? ? ? ? ? print(k,v)? ? ? ? ? ? ? for k,_ in d.items():? ? ? ? ? ? ? ? ? print(k)? ? ? ? ? ? ? for _,v in d.items():? ? ? ? ? ? ? ? ? print(v)? ? Python3中,keys、values、items 方法返回一個類似一個生成器的可迭代對象,不會把函數的返回結果復制到內存中? ? ?Dictionary view 對象? ? ?字典的 entry 的動態的視圖,字典變化,視圖將反應出這些變化
-
一邊遍歷一邊清空
要求刪除 value 為字符串的元素d = dict(a=1,b=2,c=’abc’)keys = []for k,v in d.items():????if isinstance(v,str):????????keys.append(k)print(keys)for k in keys:????d.pop(k)print(d) -
key 的要求? set 元素可以就是看作 key,set 可以看作 dict 的簡化版? hashable 可哈希才可以作為 key,可以使用 hash() 測試
-
collections.defaultdict([default_factory[,…]])?第一個參數是 default_factory,缺省是 None,它提供一個初始化函數,當 key 不存在的時候,會調用這個工工廠函數來生成 key 對應的 valueimport randomd = {}for k in ‘abcdef’:????for i in range(random.randint(1,5)):????????if k not in d.keys():????????????d[k] = []????????d[k].append(i)print(d)——————————————————————————from collections import defaultdictimport randomd = defaultdict(list)? ? #是為了下面要用for k in ‘abcdef’:????for i in range(random.randint(1,5)):????????d[k].append(i)? ? ? #如果 k 不存在,則d[k] = list()print(d)
-
collections.OrderedDict([items])?key 并不是按照加入的順序排列,可以使用 OrderedDict 記錄順序from collections import OrderedDictimport randomd = {‘b’:3,’a’:4,’p’:1,’o’:2}print(d)keys = list(d.keys())random.shuffle(keys)print(keys)od = OrderedDict()for key in keys:????od[key] = d[key]print(od)print(od.keys)
-
有序字典可以記錄元素插入的順序,打印的時候也是按照這個順序輸出打印? 3.6 版本的Python 的字典就是記錄 key 插入的順序(IPython 不一定有效果)? ? ? ?應用場景:? ? ? ? ? ?假如使用字典記錄了 N 個產品,這些產品使用 ID 由小到大加入到字典中? ? ? ? ? ?除了使用字典檢索的遍歷,有時候需要取出 ID,但是希望是按照輸入的順序? ? ? ? ? ?否則還需要重新把遍歷到的值排序
二、datetime
-
datetime 模塊是對日期、時間、時間戳的處理
-
datetime 類?today() 返回本地時區當前時間的 datetime 對象?now(tz=None) 返回當前時間的 datetime 對象,時間到微秒,如果 tz 為None,返回 和 today() 一樣?utcnow() 沒有時區的當前時間?fromtimestamp(timestamp,tz=None)? 從一個時間戳返回一個 datetime 對象
-
datetime 對象?timestamp() 返回一個到微秒的時間戳,時間戳就是格林威治時間1970年1月1日0點到現在的秒數
構造方法 datetime.datetime(2016,12,6,16,29,43,79043)year、month、day、hour、minute、second、microsecond,取 datetime 對象的年月日時分秒及微秒? ? ? ? ? weekday()? ? ? ? ? ? ? ? 返回星期的天,周一0,周日6? ? ? ? ? isoweekday()? ? ? ? ? ? 返回星期的天,周一1,周日7? ? ? ? ? date()? ? ? ? ? ? ? ? ? ? ? ?返回日期 date 對象? ? ? ? ? time()? ? ? ? ? ? ? ? ? ? ? ?返回時間 time 對象? ? ? ? ? replace()? ? ? ? ? ? ? ? ? ?修改并返回新的時間? ? ? ? ? isocalendar()? ? ? ? ? ? 返回一個三元組(年,周數,周的天) -
日期格式化?類方法 strptime(date_string,format) ,返回 datetime 對象?對象方法 strftime(format),返回字符串?字符串 format 函數格式化>>> import datetime>>> dt = datetime.datetime.strptime(“21/11/06 16:30″,”%d/%m/%y %H:%M”)>>> print(dt)2006-11-21 16:30:00>>> print(dt.strftime(“%Y-%m-%d %H:%M:%S”))2006-11-21 16:30:00>>> print(“{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}”.format(dt))2006/11/21 16::30::00
-
timedelta 對象>>> datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=1,weeks=0)?datetime.timedelta(0, 3600)
>>> year = datetime.timedelta(days=365)?>>> year?datetime.timedelta(365)total_seconds()? 返回時間差的總秒數 - time
time.sleep(secs)? 將調用線程掛起指定的秒數
三、列表解析式
-
語法?[返回值 for 元素 in 可迭代對象 if 條件]?使用中括號 [],內部是 for 循環,if 條件語句可選?返回一個新的列表
-
列表解析式是一種語法糖?編譯器會優化,不會因為簡寫而影響效率,反而因優化提高提高了效率?減少程序員工作量,減少出錯?簡化了代碼,但可讀性增強
-
# 返回 1 – 10 平方的列表?[i**2 for i in range(1,11)]# 有一個列表 lst = [1,4,9,16,2,5,10,15],生成一個新列表,要求新列表元素是 lst 相鄰 2 項的和[[1,4,9,16,2,5,10,15][i]+[1,4,9,16,2,5,10,15][i+1] for i in range(len([1,4,9,16,2,5,10,15])-1)]# 打印九九乘法表{print(“{}*{}={:<2}{}”.format(j,i,i*j,’\n’ if i==j else ‘ ‘),end=”) for i in range(1,10) for j in range(1,i+1)}# “0001.abadicddws” 是 ID 格式,要求 ID 格式是以點號分割,左邊是 4 位從 1 開始的整數,右邊是 10 位隨機小寫英文字母,請依次生成前 100 個 ID 的列表import randomimport string{print(“{:04}.{}”.format(i,”.join(random.choice(string.ascii_lowercase) for _ in range(10)))) for i in range(1,101)}
四、內建函數
-
標識?id :返回對象的唯一標識,CPython?返回內存地址
-
哈希?hash():返回一個對象的類型
-
類型?type() :返回對象的類型
-
類型轉換:float(),int(),bin(),hex(),oct(),bool(),list(),tuple(),dict(),set(),complex(),bytes(),bytearray()
-
輸入 input([prompt]):接收用戶輸入,返回一個字符串
-
打印?print(*objects,sep=’ ‘,end=’\n’,file=sys.stdout,flush=False):打印輸出,默認使用空格分割,換行結尾,輸出到控制臺或者輸出至一個文件
-
對象長度?len(s):返回一個集合類型的元素合數
-
isinstance(obj,class_or_tuple):判斷對象?obj?是否屬于某種類型或者元祖中列出的某個類型,如 isinstance(True,int)
-
issubclass(cls,class_or_tuple):判斷類型?cls?是否是某種類型的子類或元祖中列出的某個類型的子類,如 issubclass(bool,int)
-
絕對值?abs(x),x?為數值
-
最大值?max(),最小值 min():返回可迭代對象中最大或最小值;返回多個參數中最大或最小值
-
round(x)?四舍六入五取偶,round(-0.5)? ?–> 0
-
pow(x,y)?等價于?x**y
-
range(stop)? 從 0?開始到?stop-1?的可迭代對象;range(start,stop[,step])?從start?開始到?stop-1?結束步長為?step?的可迭代對象
-
divmod(x,y)?等價于?tuple(x//y,x%y)
-
sum(iterable[,start])?對可迭代對象的所有數值元素求和,如?sum(range(1,100,2))
-
chr(i)?給一個一定范圍的整數返回對應的字符,如 chr(97)、chr(20013)
-
ord(c)?返回字符對應的整數,如?ord(‘a’)、ord(‘中’)
-
str()、rep()、ascii()
-
sorted(iterable[,key][,reverse])?排序:返回一個新的列表,默認升序
-
翻轉?reversed(seq):返回一個翻轉元素的迭代器
-
枚舉 enumerate(seq,start=0):迭代一個序列,返回索引數字和元素構成的二元組;start?表示索引開始的數字,默認是 0>>> list(enumerate(range(5)))[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]>>> list(enumerate(range(5),100))[(100, 0), (101, 1), (102, 2), (103, 3), (104, 4)]
-
迭代器和取元素 iter(iterable)、next(iterator[,default])? ? ? ? iter?將一個可迭代對象封裝成一個迭代器? ? ? ? next?對一個迭代器取下一個元素,如果全部元素都取過了,再次?next?會拋?StopIteration?異常? ? ? ? ? ? ? ? ?it = iter(range(5))? ? ? ? ? ? ? ? ?next(it)? ? ? ? ? ? ? ? ?it =reversed([1,3,5])? ? ? ? ? ? ? ? ?next(it)
-
可迭代對象?能夠通過迭代一次次返回不同的元素的對象所謂相同,不是指值是否相同,而是元素在容器中是否是同一個,例如?列表中值可以重復的,[‘a’,’a’],雖然這個列表有 2?個元素,值一樣,但是兩個 ‘a’?是不同的元素可以迭代,但是未必有序,未必可索引
可迭代對象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器可以使用成員操作符?in、not?in,in?本質上就是在遍歷對象 -
拉鏈函數?zip(*iterable)
像拉鏈一樣,把多個可迭代對象合并在一起,返回一個迭代器將每次從不同對象中取到的元素合并成一個元祖>>> list(zip(range(3),range(3)))[(0, 0), (1, 1), (2, 2)]>>> list(zip(range(3),range(5)))[(0, 0), (1, 1), (2, 2)]木桶原理
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95551