日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 列表推導和生成器表達式的使用

瀏覽:38日期:2022-06-28 16:27:27
序列

序列是指一組數(shù)據(jù),按存放類型分為容器序列與扁平序列,按能否被修改分為不可變序列與可變序列。

容器序列與扁平序列

容器序列存放的是對象的引用,包括list、tuple、collections.deque。

扁平序列存放的是對象的值,包括str、bytes、bytearray、memoryview和array.array。

扁平序列的值是字符、字節(jié)和數(shù)值這種基礎類型。

不可變序列與可變序列

不可變序列,包括tuple、str、bytes。

可變序列,包括list、bytearray、array.array、collection.deque、memoryview。

下圖左邊是父類,右邊是子類,可以看出可變序列是從不可變序列繼承來的,擴展了可變方法:

python 列表推導和生成器表達式的使用

列表推導

Python語言魅力在于簡潔,這能從最常見的創(chuàng)建列表體現(xiàn)出來,比如我們想把字符串'abc'轉換成新列表['a', 'b', 'c'],常規(guī)寫法:

symbols = 'abc'codes = []for symbol in symbols: codes.append(symbol)print(codes) # ['a', 'b', 'c']

用到了for循環(huán)和列表append方法。實際上可以不用append方法,直接:

symbols = 'abc'codes = [symbol for symbol in symbols]

這叫做列表推導,是更加Pythonic的寫法。

無論是編寫效率還是可閱讀性,列表推導都更勝一籌,可以說是構建列表的快捷方式。但是不能濫用,通用原則是,如果列表推導的代碼超過了兩行,就要考慮用append了。這不是規(guī)定,完全可以憑借自我喜好來選擇。

笛卡爾積是指多個序列中元素所有組合,我們用列表推導來實現(xiàn)笛卡爾積:

colors = ['black', 'white']sizes = ['S', 'M', 'L']tshirts = [(color, size) for color in colors for size in sizes]

一行代碼搞定!Life is short,use Python,list comprehension is wonderful,amazing。

注意這行代碼有兩個for循環(huán),等價于:

for color in colors: for size in sizes:

運行結果是:

[(’black’, ’S’), (’black’, ’M’), (’black’, ’L’), (’white’, ’S’), (’white’, ’M’), (’white’, ’L’)]

如果換一下順序:

[(color, size) for color in colors for size in sizes]

等價于:

for size in sizes: for color in colors:

運行結果是不同的,觀察第2個元素:

[(’black’, ’S’), (’white’, ’S’), (’black’, ’M’), (’white’, ’M’), (’black’, ’L’), (’white’, ’L’)]生成器表達式

一般接觸到生成器時,都要講yield關鍵字,看似有點復雜,然而卻很簡單,生成器就像列表推導一樣,只不過是用來生成其他類型序列的,比如元組:

symbols = 'abc'codes = (symbol for symbol in symbols)

它的語法非常簡單,把列表推導的中括號[]換成小括號(),就可以了。

語法相似,本質上卻有很大區(qū)別,我們試著用生成器表達式來實現(xiàn)笛卡爾積,看看會有什么變化:

colors = ['black', 'white']sizes = ['S', 'M', 'L']tshirts = ((color, size) for color in colors for size in sizes)

運行結果是:

<generator object <genexpr> at 0x000001FD57D2DB30>

generator object,結果是一個生成器對象。因為生成器表達式在每次迭代時才會逐個產出元素,所以這里的結果并不是已經(jīng)創(chuàng)建好的元組。列表推導才會一次性產生新列表所有元素。

通過迭代把生成器表達式結果輸出:

for tshirt in tshirts: print(tshirt)

(’black’, ’S’)(’white’, ’S’)(’black’, ’M’)(’white’, ’M’)(’black’, ’L’)(’white’, ’L’)

生成器表達式可以提升程序性能,比如要計算兩個各有1000個元素的列表的笛卡爾積,生成器表達式可以幫忙省掉運行for循環(huán)的開銷,即一個包含100萬個元素的列表。

yield作用和return差不多,后面會講到。

Tips

本小節(jié)內容是我看《流暢的Python》第一遍時記錄的知識點:

Python標準庫用C實現(xiàn)了豐富的序列類型。 列表推導,就是指a = [x for x in something]這種寫法。 生成器表達式用于生成列表外的其他類型的序列,它跟列表推導的區(qū)別僅僅在于方括號換成圓括號,如b = tuple(x for x in something) 。 array.array(’I’, x for x in something) ,array構造方法的第一個參數(shù)指定了數(shù)組中數(shù)字的存儲方式。 for tshirt in [c, s for c in colors for s in sizes],列表推導會一次性生成這個列表,存儲在內存中,占用資源。for tshirt in (’%s %s’ for c in colors for s in sizes),生成器表達式只在循環(huán)時逐個產出元素,避免額外的內存占用,省掉了運行for循環(huán)的開銷。 小結

本文首先介紹了序列的概念,然后演示了Python常規(guī)騷操作——列表推導,最后引出了生成器表達式這個看似復雜實則簡單的語法。列表是可變的,它有個不可變的孿生兄弟,元組。

參考資料:

《流暢的Python》

以上就是python 列表推導和生成器表達式的使用的詳細內容,更多關于python 列表推導和生成器表達式的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
电影91久久久| 国产福利片在线观看| 电影天堂国产精品| 另类综合日韩欧美亚洲| 国产精品对白| 精品视频高潮| 91偷拍一区二区三区精品| 日产精品一区二区| 国产一区二区三区不卡av| 在线看片国产福利你懂的| 欧美国产小视频| 黄毛片在线观看| 欧美成人久久| 亚洲精品精选| 777久久精品| 国产精品毛片久久| 久久国产日韩| 婷婷视频一区二区三区| 国产精品成人国产| 999国产精品| 日韩av资源网| 日韩精品一区二区三区免费观影| 欧美在线亚洲综合一区| 午夜电影一区| 日韩在线第七页| 久久亚洲欧洲| 97久久亚洲| 精品国产91| 亚洲综合中文| 日产精品一区二区| 男女男精品视频网| 91综合网人人| 日本视频中文字幕一区二区三区| 中文在线中文资源| 91久久久精品国产| 久久精品凹凸全集| 午夜一级久久| 欧美男人天堂| 国产欧美综合一区二区三区| 精品美女在线视频| 国语精品一区| 国产一区调教| 国产欧美日韩一区二区三区四区 | 日本久久二区| av亚洲在线观看| а√在线中文在线新版| 18国产精品| 亚洲人成精品久久久| 91精品国产调教在线观看| 精品日韩在线| 麻豆国产91在线播放| 综合一区av| 欧美日韩精品一本二本三本| 欧美啪啪一区| 国产精品一区二区精品| 狠狠久久婷婷| 亚洲经典在线| 欧美日韩日本国产亚洲在线| 久久精品电影| 久久天堂av| 亚洲不卡av不卡一区二区| 日韩电影免费在线观看| 伊人久久视频| 欧美精品一线| 日韩视频1区| 国产精品xxx在线观看| 福利一区在线| 日韩一区二区在线免费| 99久久99久久精品国产片果冰 | 日韩精品一区二区三区免费观看| 三级在线看中文字幕完整版| 午夜欧美巨大性欧美巨大| 久久亚洲精品中文字幕蜜潮电影| 999久久久91| 老司机精品久久| 欧美伊人影院| 亚洲人成在线网站| 亚洲欧美不卡| 国产精品网站在线看| 理论片午夜视频在线观看| 婷婷综合社区| 免费人成精品欧美精品| 久久国产麻豆精品| 国产白浆在线免费观看| 欧洲毛片在线视频免费观看| 亚洲va久久| 黄在线观看免费网站ktv| 国产亚洲午夜| 久久99精品久久久野外观看| 亚洲午夜av| 国产香蕉精品| 一区二区三区视频免费观看| 日韩国产在线不卡视频| 五月激情久久| 欧美亚洲专区| 国产精品日本| 久久天堂av| 日本不卡高清| 欧美日韩国产高清| 国产不卡精品| 国产欧美一区二区三区米奇| 亚洲精品1区2区| 超碰99在线| 欧美三区不卡| 亚洲色图网站| 激情欧美亚洲| 黄色网一区二区| 婷婷亚洲精品| 免费看欧美美女黄的网站| 超碰超碰人人人人精品| 麻豆精品视频在线观看免费| 亚洲欧美日本国产| 久久精品国内一区二区三区水蜜桃| 国产麻豆精品久久| 另类av一区二区| 日本a级不卡| 久久视频一区| 亚洲永久av| 毛片在线网站| av在线最新| 亚洲综合在线电影| 韩国三级一区| 亚洲第一区色| 黄色国产精品| 好吊一区二区三区| 精品一区毛片| 99久久久久| 久久电影tv| 欧美中文一区二区| 亚洲中午字幕| 日韩欧美美女在线观看| 日本一区二区三区中文字幕| 亚州欧美在线| 国产精品毛片久久久| 久久久久黄色| 国产中文欧美日韩在线| 老司机免费视频一区二区三区| 精品三区视频| 91精品一区国产高清在线gif| 午夜久久美女| 91亚洲精品视频在线观看 | 免费日韩一区二区三区| 久久一区欧美| 欧美精品高清| 欧美日韩国产探花| 日韩欧美中文字幕一区二区三区 | japanese国产精品| 一区二区国产在线观看| 欧美一区精品| 日韩欧美在线中字| 日韩精品一区第一页| 国产精品99久久免费| 久久久精品午夜少妇| 免费美女久久99| 亚洲欧美日本国产 | 国产精品一区二区中文字幕| 国产成人精品一区二区免费看京| 亚洲福利久久| 国产精品22p| 亚洲少妇在线| 精品国内亚洲2022精品成人| 在线视频亚洲| 精品国产精品国产偷麻豆| 国产在线日韩| 精品精品国产三级a∨在线| 亚洲欧美日韩国产一区二区| 美女精品视频在线| 国产午夜久久| 中文字幕系列一区| 欧美国产亚洲精品| 五月国产精品| 亚洲综合欧美| 午夜精品成人av| 国产精品一级在线观看| 综合精品一区| 欧美99久久| 婷婷激情一区| 福利在线免费视频| 欧美成a人片免费观看久久五月天| 国产婷婷精品| 欧美网站在线| 桃色一区二区| 国产一区二区三区黄网站| 青青草精品视频| 久久高清国产| 中文在线不卡| 亚洲激情欧美| 国产一区成人| 国产视频欧美| 亚洲专区视频| 男女男精品网站| 亚洲影院天堂中文av色| 亚洲天堂免费| 日韩一区二区三区精品| 亚洲狼人精品一区二区三区| 亚洲日韩视频| 国产情侣久久| 久久精品资源| 日韩深夜视频| 性欧美69xoxoxoxo|