day 16 - 1 內建函式(二)
內建函式(二)
reversed() 返回一個反向的迭代器
k = [1,2,3,4,5] k.reverse() #反轉 print(k) k = [1,2,3,4,5] k2 = reversed(k) #反向的迭代器 print(k2) for i in k2: print(i) #返回結果 反序的迭代器 <list_reverseiterator object at 0x0000000000B8FBA8> #保留原列表,返回一個反向的迭代器
slice() 切片(函式,不怎麼用)
l = (1,2,23,213,5612,342,43) sli= slice(1,5,2) print(l[sli]) print(l[1:5:2])
format() 格式化輸出,它有很多功能
print(format('test', '<20')) #左對齊 print(format('test', '>40')) #右對齊 print(format('test', '^40')) #居中
bytes() 轉換為 bytes 型別
# 我拿到的是gbk編碼的,我想轉成utf-8編碼 print(bytes('你好',encoding='GBK')) # unicode 轉換成GBK的 bytes print(bytes('你好',encoding='GBK').decode('GBK')) #二進位制又轉為 GBK print(bytes('你好',encoding='utf-8')) # unicode 轉換成 utf-8 的 bytes #bytes 用途 # 網路程式設計 只能傳二進位制 # 照片和視訊也是以二進位制儲存 # html網頁爬取到的也是編碼
bytearray() 是一個 byte 型別的陣列
b_array = bytearray('你好',encoding='utf-8') print(b_array) #'\xe4\xbd\xa0\xe5\xa5\xbd' print(b_array[0]) #228
ord() 字元按照 unicode 轉數字
print(ord('好')) print(ord('1'))
chr() 數字按照 unicode 轉字元
print(chr(97))
ascii() 只要是 ascii 碼中的內容 就打印出來,不是就轉換成 \u
print(ascii('好')) print(ascii('1'))
repr() 用於百分號格式化輸出
name = 'egg' print('你好%r'%name) print(repr('1')) #是什麼就列印什麼 print(repr(1))
all() 判斷是否有 bool 值為 False 的值
返回的值有有任意一個 False 整體就為 False
print(all(['a','',123])) print(all(['a',123])) print(all([0,123]))
any() 判斷是否有 bool 值為 True 的值
返回的值有有任意一個 True 整體就為 True
print(any(['',True,0,[]]))
很重要的四個內建函式 zip filter map sorted
zip() 拉鍊方法 返回的是一個迭代器
木桶短板原則來拉鍊
l = [1,2,3,4,5] l2 = ['a','b','c','d'] l3 = ('*','**',[1,2]) d = {'k1':1,'k2':2} for i in zip(l,l2,l3,d): print(i)
filter() 過濾
filter() 函式接收一個函式 f 和一個 list,這個函式 f 的作用是對每個元素進行判斷,返回 True 或 False,filter() 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新 list
def is_odd(x): return x % 2 == 1 #返回奇數 ret = filter(is_odd,[1,2,3,4,5,6,7,8,9]) #像如下的列表推導式 [i for i in [1,2,3,4,5,6,7,8,9] if x % 2 == 1] print(ret) #可見這裡返回的是一個迭代器 for i in ret: print(i) #返回字串 def is_str(x): return type(x) == str ret = filter(is_str,[1, 'hello',[],'',None,6,7,'world',12,17]) #''也屬於字串 for i in ret: print(i)
#利用filter(),可以完成很多有用的功能 例如:刪除 None 或者空字串(不考慮 0 的問題) def is_not_empty(s): return s and len(str(s).strip()) > 0 return s and str(s).strip() ret = filter(is_not_empty,[1,'hello',[],'',None,6,7,'world',12,17]) for i in ret: print(i) #請利用filter()過濾出1~100中平方根是整數的數,即結果應該是: #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] from math import sqrt #開平方 def sqrts(s): ret = sqrt(s) return ret % 1 == 0 #除以一餘零為整數 ret = filter(sqrts,range(1,101)) for i in ret: print(i)
map 函式應用於每一個可迭代的項,返回的是一個結果 list。如果有其他的可迭代引數傳進來,map 函式則會把每一個引數都以相應的處理函式進行迭代處理。map() 函式接收兩個引數,一個是函式,一個是序列,map 將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回
ret = map(abs,[1,-4,6,-8]) print(ret) for i in ret: print(i)
filter 執行了 filter 之後的結果集合 <= 執行之前的個數
filter 只管篩選,不會改變原來的值
map 執行前後元素個數不變
值可能發生改變
sorted() 排序
sorted 使用場景:列表資料不大,且還要保留原有列表順序的時候 因為 sorted 排序不改變原有列表 所以在記憶體空間就會有兩個列表 k = [1,-4,6,5,-10] #從小到大進行排序 k.sort(key = abs) #sort 在原列表的基礎上進行排序 print(k) # reverse=True 從大到小排序 reverse=False 從小到大排序(預設) print(sorted(k,key=abs,reverse=True)) #sorted 生成了一個新列表 不改變原列表 佔記憶體 print(k) ##根據列表中每一個元素的長度進行排序 h = [' ',[1,2],'hello world'] print(sorted(h,key=len))
匿名函式
帶有 key 的五個函式,都可以和 lambda 函式組合
min max filter map sorted —— lambda
def add(x,y): return x+y print(add(10,20)) #匿名函式組成部分(不允許換行) #函式名 = 匿名函式關鍵字 參,數 : 返回值(函式名是匿名函式賦值後才有的) add = lambda x,y:x+y print(add(1,2)) #上面是匿名函式的函式用法。除此之外,匿名函式也不是浪得虛名,它真的可以匿名。在和其他功能函式合作的時候
取出字典中 value 最大值對應的 key 值
#用普通函式的寫法 dic={'k1':10,'k2':100,'k3':30} def func(key): return dic[key] print(max(dic,key=func)) #根據返回值判斷最大值,返回值最大的那個引數是結果 #匿名函式的寫法 一行搞定 print(max(dic,key=lambda k:dic[k]))