国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

您現在的位置是:首頁 » python編程資訊

資訊內容

Python 列表推導式使用的注意事項

極客小將2021-01-03-
簡介python視頻教程欄目介紹Python列表推導式的使用。相關免費學習推薦:python視頻教程Python列表推導式并不是給初學者用的,因為它非常反直覺,甚至對于有其他編程語言背景的人也是如此。我們接觸到List的使用時,學習的內容都是零散的。所以我們缺少一個關于如何在各種各樣的場景下使用List
python視頻教程欄目介紹Python列表推導式的使用。

jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

相關免費學習推薦:python視頻教程jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

Python 列表推導式并不是給初學者用的,因為它非常反直覺,甚至對于有其他編程語言背景的人也是如此。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

我們接觸到 List 的使用時,學習的內容都是零散的。所以我們缺少一個關于如何在各種各樣的場景下使用 List 的知識體系。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

本文提供了一些 List 的使用指南,盡可能涵蓋各個方面。希望本文可以成為你的一站式實用手冊。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用建議jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

1.建議使用迭代的方式jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用 List **基本的方式是以一個可迭代對象為基礎,創建一個 List 對象,這個可迭代對象可以是任意可以迭代元素的Python對象。使用方法如下。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[expression for item in iterable]

下面這段代碼展示了一個使用列表相關技術創建 List 對象的例子。在這個例子中,我們定義了一個 Integer 列表,并基于這個對象創建了保存每個數字的平方數和立方數的 List 對象。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 創建一個 Integer 列表 >>> integers = [1, 2, 3, 4, 5, 6] >>> # 創建平方數和立方數列表 >>> powers = [(x*x, pow(x, 3)) for x in integers] >>> print(powers) [(1, 1), (4, 8), (9, 27), (16, 64), (25, 125), (36, 216)]

上面的例子把 List 對象當作迭代器使用。我們應該知道,許多類型的對象也是可迭代的,比如 List、Set、Dictionary 和 String 等等。其他數據類型,像 range、map、filter,以及 pandas 包中的 Series、DataFrame,都是可迭代的。下面的代碼演示了某些對象的使用方法。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 使用 range 對象 >>> integer_range = range(5) >>> [x*x for x in integer_range] [0, 1, 4, 9, 16] >>> # 使用 Series 對象 >>> import pandas as pd >>> pd_series = pd.Series(range(5)) >>> print(pd_series) 0 0 1 1 2 2 3 3 4 4 dtype: int64 >>> [x*x for x in pd_series] [0, 1, 4, 9, 16]

2.如果只需用到其中的某些元素,應當使用條件判斷語句jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

假設你需要將符合某種條件的元素歸集起來,并創建一個 list。下面展示了相關的語法。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[expression for item in iterable if condition]

if 語句用來實現條件判斷。下面的代碼展示了這種用法的一個簡單示例。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 同樣創建一個 Integer 列表 >>> integers = [1, 2, 3, 4, 5, 6] >>> # 篩選出偶數,創建一個這些偶數的平方數列表 >>> squares_of_evens = [x*x for x in integers if x % 2 == 0] >>> print((squares_of_evens)) [4, 16, 36]

3.使用條件判斷語句jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

List 對象中還可以使用 if-else 形式的條件判斷,語法如下。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[expression0 if condition else expression1 for item in iterable]

這跟前面的那種用法有些類似,別把這兩種用法混淆。在本例中,條件語句本身是一個整體。下面的代碼提供了一個例子。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 創建一個 Integer 列表 >>> integers = [1, 2, 3, 4, 5, 6] >>> # 遍歷 integers 中的元素,如果是偶數,取平方數存入新的列表 >>> # 如果是奇數,取立方數存入新的列表 >>> custom_powers = [x*x if x % 2 == 0 else pow(x, 3) for x in integers] >>> print(custom_powers) [1, 4, 27, 16, 125, 36]

4.如果有嵌套結構,可以使用嵌套的循環jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

有可能可迭代對象中的元素自身也是可迭代的,盡管這種情況不太常見。如果你對嵌套的可迭代對象有興趣,可以使用 for 來實現循環嵌套。語法如下。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[expression for item_outer in iterable for item_inner in item_outer] # 與下面的代碼等同 for item_outer in iterable: for item_inner in item_outer: expression

上面的代碼展示了使用for實現嵌套循環的例子。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 創建一個包含元組的列表 >>> prices = [('$5.99', '$4.99'), ('$3.5', '$4.5')] >>> # 獲取元組中的每個價格,以此創建一個一維列表 >>> prices_formatted = [float(x[1:]) for price_group in prices for x in price_group] >>> print(prices_formatted) [5.99, 4.99, 3.5, 4.5]

5.替換高階函數jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

有的人比較習慣函數式編程,比如使用高階函數也是這種習慣的表現之一。特別說明一下,高階函數是那些需要使用輸入或輸出參數的函數。在 Python 中,常用的高階函數有 map() 和 filter()。 jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 創建一個 integer 類型的列表 >>> integers = [1, 2, 3, 4, 5] >>> # 使用 map 創建平方數列表 >>> squares_mapped = list(map(lambda x: x*x, integers)) >>> squares_mapped [1, 4, 9, 16, 25] >>> # 使用列表推導式創建平方數列表 >>> squares_listcomp = [x*x for x in integers] >>> squares_listcomp [1, 4, 9, 16, 25] >>> # 使用 filter 取得 integers 中的偶數列表 >>> filtered_filter = list(filter(lambda x: x % 2 == 0, integers)) >>> filtered_filter [2, 4] >>> # 使用列表推導式取得 integers 中的偶數列表 >>> filterd_listcomp = [x for x in integers if x % 2 == 0] >>> filterd_listcomp [2, 4]

從上面的例子可以看出,使用 list 的某些特性比使用高階函數更具有可讀性,而且也能實現較復雜的嵌套結構。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

1.不要忘了定義構造函數jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

有人認為列表推導式很酷炫,是 Python 特有的功能,所以為了炫耀自己的 Python 水平,即使有更好替代方案也要使用它。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 使用 range 創建列表對象 >>> numbers = [x for x in range(5)] >>> print(numbers) [0, 1, 2, 3, 4] >>> # 以一個字符串為基礎,創建一個小寫字母的字符列表 >>> letters = [x.lower() for x in 'Smith'] >>> print(letters) ['s', 'm', 'i', 't', 'h']

上述例子中,我們使用了 range 和 string,這兩種數據結構都是可迭代的,list()構造函數可以直接使用 iterable 創建一個 list 對象。下面的代碼提供了更合理的解決方案。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 使用 range 創建列表對象 >>> numbers = list(range(5)) >>> print(numbers) [0, 1, 2, 3, 4] >>> # 以一個字符串為基礎,創建一個小寫字母的字符列表 >>> letters = list('Smith'.lower()) >>> print(letters) ['s', 'm', 'i', 't', 'h']

2.不要忘了生成器表達式jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

在 Python 中,生成器是一種特殊的可迭代對象,它會延遲加載元素,直到被請求才會加載。這在處理大量數據時會非常高效,它能提升存儲效率。相比之下,list 對象為了方便計數和索引,一次性創建所有的元素。所以跟生成器相比,在元素個數相同時,list 需要占用更多內存。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

我們可以定義一個生成器函數來創建生成器。我們也可以使用下面的語句來創建生成器,這是一種稱為生成器表達式的方法。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

(expression for item in iterable)

你可能會注意到,除了使用圓括號外,它的語法跟使用 list 的語句很相似。所以需要注意區分。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

考慮下面這個例子。我們要計算前一百萬個數字的平方和。如果使用 list 來實現,方法如下。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

>>> # 創建列表對象 squares >>> squares = [x*x for x in range(10_000_000)] >>> # 計算它們的總和 >>> sum(squares) 333333283333335000000 >>> squares.__sizeof__() 81528032如上所示,list 對象占據 81528032 字節。我們考慮使用 generator 進行相同的操作,代碼如下。 >>> # 創建 generator 對象,保存每個數的平方數 >>> squares_gen = (x*x for x in range(10_000_000)) >>> # 計算它們的總和 >>> sum(squares_gen) 333333283333335000000 >>> squares_gen.__sizeof__() 96

跟使用 list 相比,使用 generator 內存開銷小得多,只有 96 字節。原因很簡單———— generator 不需要獲取所有的元素。相反,它只需要獲取各個元素在序列中的位置,創建下一個元素并呈現它,而且不必保存在內存中。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

結論jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

本文中,我們整理了 list 應用的一些關鍵要領。這些該做的和不該做的都非常清晰明了。我估計你會在合適的場景中用到它。下面是本文內容的小結。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用迭代的方式。Python 中有許多類型的 iterable,你應當在掌握基礎(list 和 tuple)的同時融會貫通。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用條件判斷語句。如果你對在 iterable 中篩選某些元素感興趣,可以多多研究條件判斷。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用條件判斷表達式。如果你需要有選擇性地獲取某些數據,可以使用條件判斷表達式。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

使用嵌套的循環。如果你要處理嵌套的 iterable,可以使用嵌套的循環結構。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

用 list 替代高階函數在很多情況下,可以用 list 替代高階函數。 jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

不要忘記 list 的構造函數定義 list 的構造函數,可以使用 iterable 創建一個 list 對象。如果你直接使用 iterable,推薦用這個方法。jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

不要忘了生成器表達式它的語法與 list 中的語法相似。在處理大量的對象時,這是一種節省內存開銷的辦法。list 和 generator 不同的是,為了日后的索引和訪問, list 必須提前創建,如果元素個數很多,就會消耗很大的內存。

以上就是Python 列表推導式使用的注意事項的詳細內容,更多請關注少兒編程網其它相關文章!jlV少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

預約試聽課

已有385人預約都是免費的,你也試試吧...

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        青青草精品视频在线| 黄色一级大片免费| 各处沟厕大尺度偷拍女厕嘘嘘| 在线观看国产福利| 国产激情在线观看视频| 国产伦精品一区二区三区四区视频_| 一区二区在线免费看| 黄色手机在线视频| 久久婷婷综合色| 天天干天天综合| 88av.com| 手机在线国产视频| 日韩av影视大全| 福利在线小视频| 成人短视频在线观看免费| 艳母动漫在线免费观看| 国产 欧美 日韩 一区| 国产又粗又猛又爽又黄的网站 | 亚洲性生活网站| 99视频在线免费| 亚洲一级片网站| 熟女视频一区二区三区| 免费看欧美黑人毛片| 人人妻人人添人人爽欧美一区| av之家在线观看| 在线免费av播放| 欧美日韩一级在线| 国产91美女视频| 免费在线观看污网站| 51xx午夜影福利| 日韩av播放器| 日韩一二区视频| 男人和女人啪啪网站| 在线免费观看av的网站| 一本二本三本亚洲码| 少妇av一区二区三区无码| 免费涩涩18网站入口| 久久天天东北熟女毛茸茸| 老熟妇仑乱视频一区二区| 三级黄色片免费观看| 欧美日本视频在线观看| jizzzz日本| 草草久久久无码国产专区| 手机av在线免费| 亚洲熟女乱色一区二区三区| 亚洲三级在线观看视频| 无码人妻丰满熟妇区五十路百度| 国产乱叫456| 不卡av免费在线| 亚洲中文字幕无码av永久| 亚洲AV无码成人精品一区| 国产wwwxx| 男人天堂999| 一卡二卡三卡视频| 伊人免费视频二| 色噜噜狠狠永久免费| 欧美 日韩 国产 高清| 青青草综合视频| 三上悠亚免费在线观看| 五月婷婷六月丁香激情| 91最新在线观看| 成年人视频在线免费| av黄色在线网站| 久久久久久久久久久99| 农民人伦一区二区三区| 久久免费一级片| 天天想你在线观看完整版电影免费| 亚洲黄色a v| 一个色综合久久| 男生操女生视频在线观看| 911福利视频| 一级黄色片国产| 日韩欧美中文视频| 亚洲色图偷拍视频| 樱空桃在线播放| 天堂а√在线中文在线| 精品少妇人妻av一区二区| www.久久com| 福利在线一区二区| 国产午夜福利100集发布| 青青草精品视频在线| 少妇高潮喷水久久久久久久久久| 欧美综合在线播放| 日本一本二本在线观看| 天天天干夜夜夜操| 在线无限看免费粉色视频| 久久久国内精品| 欧美日韩国产精品激情在线播放| 国产在线观看福利| 五月天视频在线观看| 国产又粗又爽又黄的视频| av日韩一区二区三区| 欧美在线观看视频网站| 人人爽人人爽av| 少妇av一区二区三区无码| 青青青国产在线视频| 91麻豆天美传媒在线| 日韩精品―中文字幕| 中文字幕精品一区二区三区在线| 97在线免费视频观看| 青青青在线视频免费观看| 四虎免费在线观看视频| 国产无套内射久久久国产| 亚洲一区二区图片| 女性隐私黄www网站视频| 好色先生视频污| 波多野结衣作品集| 国产激情在线看| 亚洲免费999| jizzjizz国产精品喷水| 性欧美18一19内谢| 久久久久狠狠高潮亚洲精品| 香蕉精品视频在线| 黄色av免费在线播放| 日本一本中文字幕| 亚洲小视频在线播放| 日本免费色视频| 国产黄色特级片| 国产精品专区在线| 激情五月婷婷六月| 艳母动漫在线免费观看| 亚洲黄色av网址| 日韩欧美黄色大片| 欧美 日韩 国产一区| 免费人成自慰网站| www.男人天堂网| 黄色小视频大全| japanese在线播放| 欧美h视频在线观看| 国产xxxxhd| 天天做天天爱天天高潮| www.成人黄色| 日韩av一卡二卡三卡| 中文字幕久久av| 日韩在线一区视频| 中文国产在线观看| 善良的小姨在线| 无码毛片aaa在线| 福利在线小视频| 欧美这里只有精品| 国产在线视频在线| 日韩精品视频在线观看视频| www.日本三级| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 91九色丨porny丨国产jk| 天堂av在线中文| 欧美精品久久久久久久自慰| 乱妇乱女熟妇熟女网站| 免费国产a级片| 老司机午夜av| 999热精品视频| 国产亚洲黄色片| 欧美牲交a欧美牲交aⅴ免费下载| 又色又爽又高潮免费视频国产| 亚洲黄色av网址| 欧美少妇在线观看| 日韩视频第二页| 一二三av在线| 免费av手机在线观看| 一区二区成人网| 青少年xxxxx性开放hg| 777精品久无码人妻蜜桃| heyzo国产| 2021狠狠干| 嫩草av久久伊人妇女超级a| 日本黄色a视频| 欧美性大战久久久久xxx| 一女二男3p波多野结衣| 欧美无砖专区免费| 欧美成人乱码一二三四区免费| 免费看日b视频| 天天干在线影院| 国产免费黄色一级片| 91小视频网站| 国产成人无码a区在线观看视频| 亚洲 激情 在线| 欧美日韩黄色一级片| 中文字幕超清在线免费观看| 日本va中文字幕| 国产免费黄色av| 老子影院午夜伦不卡大全| 国产农村妇女精品久久| 亚洲男人天堂色| 日本韩国欧美在线观看| 一级一片免费播放| 狠狠干狠狠操视频| 免费看污黄网站| 无码人妻h动漫| 国产精品一区二区免费在线观看| 成人性做爰片免费视频| 亚洲天堂av一区二区三区| 91网址在线播放| 日本美女高潮视频| 无码人妻丰满熟妇区毛片| 亚洲精品蜜桃久久久久久| 日韩精品一区二区三区电影| 超碰在线超碰在线| 无码人妻aⅴ一区二区三区日本| 日韩一区二区三区久久| www.精品在线|