列表解析式是一種利用 [ 表達式 + for 循環(huán) [ + if判斷 ] ] 快速生成列表對象的python語法,方便使用者快速構(gòu)建列表。
語法:
# 列表解析式 第一種效率會明顯高于第二種
[(i,j) for i in range(1000) if i > 700 for j in range(1000) if j > 900]
[{i,j} for i in range(1000) for j in range(1000) if j>900 if i > 700]
# 注:其中的元素必須可哈希,不允許是列表,字典,set()等不可哈希對象,否則將會報錯
{ (i,j) for i in range(1000) if i > 700 for j in range(1000) if j > 900 }
it = (i for i in range(10)) #將會返回一個生成器對象
一個可以做指定操作,并在每次next()時返回一個值的對象,節(jié)省空間存放數(shù)據(jù),但每次計算需要等待.
一個可以被迭代的對象,for 將會全部迭代其中的元素,也可使用next()一個個取值返回,迭代器只可以使用一輪,無法反復(fù)使用,生成器也是一個迭代器
可以被迭代的對象,例如元組,字典,集合,列表等容器,生成器和迭代器也是可迭代對象
# len():返回集合類型的長度,注:無法計算生成器或迭代器的長度,可計算list,set,dict等集合的長度
# len((i for i in range(5))) # ==> TypeError:object of type 'generator' has no len() 計算生成器的長度
isinstance(True, int), issubclass(bool, int) # 實例判斷,子類判斷
divmod(124,3) # ==> (124/3, 124%3)==(41, 1)
chr(97) # ==> int(0-255) --> char
ord("a") # ==> char --> int
hex(ord("中")) # 中文使用的是unicode編碼表對應(yīng)關(guān)系, 兩字節(jié)長度 '0x4e2d'
# 排序 迭代內(nèi)部容器,默認升序并返回排序后的列表,set和dict也可排序,迭代器也可排序
sorted([1,2,3] + ['a'],reverse=True, key=str ) # 臨時轉(zhuǎn)化類型進行比較,原值不會改變,123還是int類型 ['a', 3, 2, 1]
a = iter("abcd") # 對迭代器排序,會遍歷整個迭代器,返回一個排序好的列表;
sorted(a) # ['a', 'b', 'c', 'd']
返回迭代器的BIF
# reversed(seq) # 翻轉(zhuǎn)一個有序容器,set和dict無法翻轉(zhuǎn) ==> 返回一個翻轉(zhuǎn)后的迭代器,單個對象
[ i for i in reversed("abcd") ] # ==> ['d', 'c', 'b', 'a']
it = reversed(sorted({1,49,0,6,7,8,})) # ==> <list_reverseiterator at 0x212dce3ccf8>
print( [ i for i in it ] ) # 遍歷迭代器 [49, 8, 7, 6, 1, 0]
# 枚舉:enumerate(seq, start=0) # ==> 返回一個迭代器,每次返回一個二元組==> (index, elem)
en = enumerate([1,2,3,4,5])
next(en) # ==> (0, 1)
next(en) # ==>(1, 2)
print([i for i in en]) # [(2, 3), (3, 4), (4, 5)] 完全遍歷
# 迭代器
iter(iterable) # ==> 返回一個迭代器
iter(callable, sentinel) # ==> iterator
def fun():
x = 0
def fun1():
nonlocal x
x += 1
return x
return fun1
f = fun()
it = iter(f, 7) # == > f 必須可調(diào)用,0參,當返回值等于 sentinel 結(jié)束
[i for i in it] # == > [1,2,3,4,5,6]
# 文件讀取操作時的使用
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
from functools import partial
with open('somefile.data', 'rb') as f:
records = iter(partial(f.read, RECORD_SIZE), b'')
for r in records:
pass
# iter() 函數(shù)有一個鮮為人知的特性,如果你給它傳遞一個可調(diào)用對象和一個標記值,它
# 會創(chuàng)建一個迭代器。這個迭代器會一直調(diào)用傳入的可調(diào)用對象直到它返回標記值為止
# 可迭代對象,包括:set, dict, 生成器,string,range(),
# in, not in
# 執(zhí)行in操作,對于線性順序結(jié)構(gòu)來說,本質(zhì)上就是對其進行遍歷
# 生成器和迭代器也可以進行 in 操作
a = iter("abcd")
"a" in a # ==> True, 遍歷到第一個元素找到 "a", 迭代器為使用完,可以繼續(xù)使用
next(a) # ==> 繼續(xù)使用返回下一個 ==> 'b'
# zip()
for i in zip(range(5), "abcde"):
print(i ,end=" ") #==> (0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e')輸出結(jié)果使用enumerate()一樣
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:生成器、BIF-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://jinyejixie.com/article22/decsjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、手機網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、電子商務(wù)、小程序開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容