本篇內(nèi)容主要講解“Python解析式與生成器的介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python解析式與生成器的介紹”吧!
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供劍閣企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為劍閣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。列表解析式是將數(shù)據(jù)全部存儲在內(nèi)存中一并返回;
# 將lst1的元素+100,導(dǎo)入到lst2 lst1 = list(range(10)) lst2 = [] for item in lst1: lst2.append(item+100) print(lst2) #輸出:[100, 101, 102, 103, 104, 105, 106, 107, 108, 109] #使用列表解析式解析上面例子 new_lst1 = [item + 100 for item in lst1] print(new_lst1 ) #輸出:[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
列表解析是Python迭代機(jī)制的一種應(yīng)用,它常用于實(shí)現(xiàn)創(chuàng)建新的列表,因此用在[]中;
使用列表解析式,編譯器會優(yōu)化,不會因?yàn)楹唽懚绊懶?,反而?yōu)化提升效率,減少代碼量,可讀性強(qiáng),工作量降低,減少出錯;
帶條件判斷的列表解析式;
#判斷item滿足被2整除,被3整除,list2和list3的寫法都是一樣的 list1 = list(range(100)) list2 = [item + 100 for item in list1 if item %2 == 0 and item %3 ==0] print(list2) #輸出:[100, 106, 112, 118, 124, 130, 136, 142, 148, 154, 160, 166, 172, 178, 184, 190, 196] list3 = [item + 100 for item in list1 if item % 2 == 0 if item % 3 == 0] print(list3) #輸出:[100, 106, 112, 118, 124, 130, 136, 142, 148, 154, 160, 166, 172, 178, 184, 190, 196]
帶循環(huán)的列表解析式;
lst = [] for i in range(2): for j in range(2): lst.append((i, j)) print(lst) #輸出:[(0, 0), (0, 1), (1, 0), (1, 1)] #將上述代碼解析 lst = [(i, j) for i in range(2) for j in range(2)] print(lst) #輸出:[(0, 0), (0, 1), (1, 0), (1, 1)]
帶循環(huán)和條件判斷的列表解析式;
lst = [(i,j) for i in range(10) if i>2 for j in range(10,15) if j>13] print(lst) #輸出:[(3, 14), (4, 14), (5, 14), (6, 14), (7, 14), (8, 14), (9, 14)]
set1 = {(x,x+1) for x in range(10)} print(set1) #輸出:{(0, 1), (1, 2), (7, 8), (6, 7), (4, 5), (5, 6), (8, 9), (9, 10), (2, 3), (3, 4)}
集合解析式和列表解析式用法一樣,只是集合解析式使用的是{}花括號;
# 字典解析式 dict1 = {'{}'.format(x):x for x in range(10)} print(dict1) #輸出:{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} # 輸出三個元素,因?yàn)闀籯ey會被覆蓋 dict2 = {x:y for x in range(3) for y in range(3)} print(dict2) #輸出:{0: 2, 1: 2, 2: 2} # 上式等價于 dict3 = {} for x in range(3): for y in range(3): dict3[x] = y print(dict3) #輸出:{0: 2, 1: 2, 2: 2}
字典解析式也是使用{}花括號括起來的;
因?yàn)樽值溆衚ey-value鍵值對,所以使用字典解析式時key會自動去重;
g = (item for item in range(10)) print(g) #輸出:<generator object <genexpr> at 0x0095BBF0> print(next(g)) #輸出:0 print(next(g)) #輸出:1 ....
生成器表達(dá)式:返回一個對象,這個對象只有在需要的時候才產(chǎn)生結(jié)果;
生成器的特點(diǎn)是按需計算,惰性求值,大可能的節(jié)約內(nèi)存空間;
生成器是是單迭代器對象,一次只能產(chǎn)生一個值,且每個值只能取一遍,超過次數(shù)會報錯;
生成器和迭代器的相同之處在于都可以通過for循環(huán)取值,因此都是可迭代對象;
g = (item for item in range(10)) print(g) #輸出:<generator object <genexpr> at 0x0095BBF0> value1 = next(g) print(value1) #輸出:0 value2 = next(g) print(value2) #輸出:1 print('*'*100) for item in g: print(item) #輸出:2,3,4,5,6,7,8,9
通過next獲取值:如果取值的次數(shù)超過生成器對象值的長度,則會報錯;
通過for循環(huán)取值:如果生成器對象沒有值的時候,for循環(huán)會通知迭代,所以不會報錯;
到此,相信大家對“Python解析式與生成器的介紹”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章標(biāo)題:Python解析式與生成器的介紹-創(chuàng)新互聯(lián)
鏈接分享:http://m.rwnh.cn/article48/doehep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、外貿(mào)建站、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容