五星方法以下: key : min max sorted function :filter map normal: reversed zip zip_longest globals locals print sum repr reduce 四星方法: bytes abs divmod 一、min:返回可迭代對象的最小值(可加key,key爲函數名,經過函數的規則,返回最小值)。 ***** print(min([1,-2,3,4,100,101])) # -2 print(min([1,-2,3,4,100,101],key=abs)) # 1 應用: 求出年齡最小的那個元組 ls = [('daming',1000),('xiaoming',18),('zhongming',500)] # 這裏的數據還不算複雜,可用以前學過的知識求出 min_age = min([i[1] for i in ls]) for j in ls: if j[1] == min_age: print(j) 可是有時候數據複雜的狀況下,用以前的知識寫,可能會很複雜。 這時可用min()方法,配合自定製的函數進行求值 def func(x): return x[1] # 1000 18 500 print(min(ls,key=func)) 結果:('xiaoming', 18) min(可迭代對象,key=函數名): 1,它會將iterable的每個元素當作函數的參數傳進去。 2,它會按照返回值去比較大小。 3,最後返回的是遍歷的元素 x dic = {'a':3,'b':2,'c':1} def func1(x): return dic[x] print(min(dic,key=func1)) 結果:c # 這裏傳進去的元素是字典的鍵,比較的返回值是字典的值,最後返回的是遍歷的鍵 def func2(x): return x[1] print(min(dic.items(),key=func2)) 結果:('c', 1) # 這裏傳進去的元素是字典的鍵和值組成的元組,比較的返回值是字典的值,最後返回的是遍歷的元組 二、max:返回可迭代對象的最大值(可加key,key爲函數名,經過函數的規則,返回最大值)。 ***** print(max([1,2,3,100])) # 100 三、sorted:對全部可迭代的對象進行排序操做。 ***** 與列表的sort區分: 列表的sort方法是對原列表進行排序修改,並無生成新的列表 內置函數sorted方法會造成一個新列表 l1 = [2,3,5,3,1,9,8,6] l1.sort() print(l1) print(sorted(l1)) # 造成了一個新列表 print(l1) # 原列表不變 內置函數sorted還能夠與函數結合使用 l2 = [(1,1000),(2,18),(4,250),(3,500)] def func1(x): return x[1] print(sorted(l2,key=func1)) #按第二個元素升序排序 [(2, 18), (4, 250), (3, 500), (1, 1000)] print(sorted(l2,key=func1,reverse=True)) #按第二個元素降序排序 [(1, 1000), (3, 500), (4, 250), (2, 18)] 四、filter:過濾,經過你的函數,過濾一個可迭代對象(相似於生成器表達式的篩選模式) 生成一個迭代器。 ***** l1 = [1,2,3,4,5,6] def fun(x): return x % 2 == 0 #篩選出偶數 g = filter(fun,l1) # filter(fun,l1)生成的是一個迭代器 print(g) for i in g: print(i) 結果: 2 4 6 l2 = [(2,1),(3,4),(4,5)] def fun2(x): return x[1] % 2 == 1 #篩選出第二個元素爲奇數的元組 g = filter(fun2,l2) for i in g: print(i) 結果: (2, 1) (4, 5) 五、map:會根據提供的函數對指定序列作映射。(循環修改並返回) 生成一個迭代器***** l1 = [1,2,3,4,5,6] def fun(x): return x**2 #返回每一個元素的平方 g = map(fun,l1) for i in g: print(i) 結果:1 4 9 16 25 36 (min max sorted filter返回的都是遍歷的參數,map返回的是return的值) 六、reversed:將一個序列翻轉,並返回此翻轉序列的迭代器。 ***** 6-1、reversed()與列表的reverse()區分: 列表的reverse()只能列表使用:列表.reverse(),對原列表進行翻轉,結果返回的仍是列表。 內置函數reversed(),將一個序列翻轉,結果是返回一個迭代器。 列表的reverse() l1 = [1,3,4,2,6] l1.reverse() #將列表進行翻轉 print(l1) #返回修改後的列表 [6, 2, 4, 3, 1] 內置函數reversed() reversed(l1) #生成一個迭代器 print(reversed(l1)) #一個地址 for i in reversed(l1): print(i) 結果: 用for循環輸出迭代器的值 6 2 4 3 1 字符串使用reversed() s1 = 'abcdefg' for i in reversed(s1): print(i) 結果: g f e d c b a 字典使用reversed() 報錯 dic = {'name':'xiaoming','age':1000,'hobby':'oldwomen'} # 不行 七、拉鍊方法:zip() 將多個iter縱向組成元素爲元組的迭代器,默認以長度最小的iterable爲標準長度 ***** l1 = [1,2,3,4] tu1 = ('a','b','c') dic = {'name':'xiaoming','age':18,'hobby':'girl','hometown':'guangzhou'} zip(l1,tu1,dic) #迭代器(生成器對象) print(zip(l1,tu1,dic)) #迭代器地址:<zip object at 0x000002C878E6A6C8> for i in zip(l1,tu1,dic): print(i) #循環輸出迭代器的內容: (1, 'a', 'name') (2, 'b', 'age') (3, 'c', 'hobby') # 若想以最大的iterable爲標準長度,則能夠使用itertools.zip_longest() from itertools import zip_longest x = [1, 3, 5, 7, 9] y = [2, 4, 6, 8] for i in zip_longest(x, y): print(i) (1, 2) (3, 4) (5, 6) (7, 8) (9, None) 8、 globals() :返回一個字典(包含所有的全局變量) locals() : 返回一個字典(包含的是當前做用域的全部變量) b = 2 a = 3 print(globals()) print(locals()) 結果: 這兩個結果同樣,由於都是在全局執行的。 def fun(): a = 3 b = 2 print(globals()) print(locals()) fun() 結果: globals(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000228CB787748>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/OldBoy/Knight/PythonProject/day13/t2.py', '__cached__': None, 'b': 2, 'a': 3, 'fun': <function fun at 0x00000228CB351E18>} locals():{'b': 2, 'a': 3} 九、print print的參數分析:print(self, *args, sep=' ', end='\n', file=None) 1,*args:可接收多個位置參數 2,sep:打印多個值之間的分隔符,默認爲空格 3,end:每一次打印的結尾,默認爲換行符 4,file: 默認是輸出到屏幕,若是設置爲文件句柄,輸出到文件 print(1,2,3,sep='|') # 1|2|3 print(1,2,end=' ') print(3,4) # 1 2 3 4 十、sum:對可迭代對象進行求和計算(可設置初始值)。 ***** sum(iterable,start_num) print(sum([1,2,3,4,100,101])) # 211 print(sum([1,2,3,4,100,101],100)) # 311(第二個參數爲初始值) print(sum([int(i) for i in [1,'2',3,'4','100',101]])) 十一、repr:返回一個對象的string形式(原形畢露) ***** print(repr('{"name":"xiaoming"}')) #'{"name":"xiaoming"}' print('{"name":"xiaoming"}') # {"name":"xiaoming"} 格式化輸出%r--->原封不動的寫出來(基礎數據類型均可接收) 字符串單雙引號都默認是單引號 msg = 'xiaoming是%r的人' % ('德高望重') print(msg) # xiaoming是'德高望重'的人 msg = 'xiaoming是%r的人' % ("德高望重") print(msg) # xiaoming是'德高望重'的人 msg = 'xiaoming是%r的人' %(18) print(msg) # xiaoming是18的人 msg = 'xiaoming是%r的人' %(True) print(msg) # xiaoming是True的人 msg = 'xiaoming是%r的人' %({'name':'xiaming','age':18}) print(msg) # xiaoming是{'name': 'xiaming', 'age': 18}的人 repr():可用於判斷json pickle序列化模塊 特殊字符串,python字符串的區別 12、reduce Python3中reduce移到了functools模塊中,你能夠用過from functools import reduce來使用它。 reduce一樣是接收兩個參數:func(函數)和seq(序列,如list) 原理:首先將序列中的前兩個元素,傳入func中,再將獲得的結果和第三個元素一塊兒傳入func,…, 這樣一直計算到最後,獲得一個值,把它做爲reduce的結果返回。 from functools import reduce ret = reduce(lambda x,y:x+y, [1, 2, 3, 4]) print(ret) # 10 l = [30, 11, 77, 8, 25, 65, 4] ret = reduce(lambda x,y: x if x > y else y, l) print(ret) # 77 1三、bytes:unicode ---> bytes類型(單向的編碼) **** 編碼encode(): s1 = '小明' b1 = s1.encode('utf-8') print(b1) # b'\xe5\xb0\x8f\xe6\x98\x8e' 解碼decode(): s2 = b1.decode('utf-8') print(s2) # 小明 用bytes()方法編碼(單向) a1 = '小白' b1 = bytes(a1,encoding='utf-8') print(b1) # b'\xe5\xb0\x8f\xe7\x99\xbd' 不能用bytes()方法解碼 a2 = bytes(b1,encoding='utf-8') print(a2) # 報錯 只能用decode()解碼 a2 = b1.decode('utf-8') print(a2) # 小白 1四、abs:函數返回數字的絕對值。 **** print(abs(-100)) # 100 1五、divmod:計算除數與被除數的結果,返回一個包含商和餘數的元組(a // b, a % b)。 **** print(divmod(12,7)) # (1, 5) (商,餘數)