python實(shí)現(xiàn)列表推導(dǎo)式與生成器
列表推導(dǎo)式和生成器是 Python 中的兩個(gè)非常有用的工具。它們可以幫助你以簡(jiǎn)潔和高效的方式創(chuàng)建和處理數(shù)據(jù)集合。了解它們的用法不僅可以讓代碼更加簡(jiǎn)潔,還能提升代碼的執(zhí)行效率。
1. 列表推導(dǎo)式
列表推導(dǎo)式(List Comprehension)是一種簡(jiǎn)潔的創(chuàng)建列表的方式。通過它,能夠用一行代碼生成列表,而不需要像傳統(tǒng)方式那樣使用循環(huán)。
1.1 基本語法
new_list = [expression for item in iterable if condition]
- expression:在每個(gè)元素上執(zhí)行的操作,結(jié)果會(huì)存入新的列表。
- item:從可迭代對(duì)象中獲取的元素。
- iterable:可以是列表、元組、集合、字符串等任何可迭代對(duì)象。
- condition(可選):對(duì)元素進(jìn)行篩選,只有滿足條件的元素才會(huì)被添加到新的列表中。
1.2 示例
創(chuàng)建一個(gè)包含1到10平方值的列表:
squares = [x**2 for x in range(1, 11)] print(squares) # 輸出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
帶條件的列表推導(dǎo)式:
只保留偶數(shù)的平方:
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0] print(even_squares) # 輸出:[4, 16, 36, 64, 100]
使用多個(gè)循環(huán)的列表推導(dǎo)式:
創(chuàng)建一個(gè)包含(1, 2), (1, 3), (2, 2), (2, 3)的列表:
pairs = [(x, y) for x in range(1, 3) for y in range(2, 4)] print(pairs) # 輸出:[(1, 2), (1, 3), (2, 2), (2, 3)]
2. 生成器表達(dá)式
生成器表達(dá)式(Generator Expression)與列表推導(dǎo)式非常相似,但不同的是,生成器表達(dá)式不會(huì)一次性將所有結(jié)果存儲(chǔ)在內(nèi)存中,而是每次迭代時(shí)動(dòng)態(tài)生成數(shù)據(jù)。這使得生成器在處理大量數(shù)據(jù)時(shí)比列表推導(dǎo)式更高效。
2.1 基本語法
generator = (expression for item in iterable if condition)
生成器表達(dá)式的語法與列表推導(dǎo)式幾乎相同,只是使用了圓括號(hào)而不是方括號(hào)。
2.2 示例
生成一個(gè)生成器表達(dá)式:
gen = (x**2 for x in range(1, 11)) print(gen) # 輸出:<generator object <genexpr> at 0x...>
要獲取生成器中的元素,可以使用 next()
函數(shù)或?qū)⑵滢D(zhuǎn)為列表:
print(next(gen)) # 輸出:1 print(next(gen)) # 輸出:4
將生成器轉(zhuǎn)為列表:
gen_list = list(gen) print(gen_list) # 輸出:[9, 16, 25, 36, 49, 64, 81, 100]
2.3 生成器的優(yōu)勢(shì)
生成器的主要優(yōu)勢(shì)在于它節(jié)省內(nèi)存。生成器一次只生成一個(gè)值,而不是像列表那樣一次性將所有元素加載到內(nèi)存中。因此,生成器在處理非常大的數(shù)據(jù)集時(shí)非常有用。
例如:生成前 100 萬個(gè)數(shù)字的平方
使用生成器:
large_gen = (x**2 for x in range(1, 1000001)) print(next(large_gen)) # 輸出:1
與列表推導(dǎo)式相比,生成器幾乎不占用額外內(nèi)存,而列表推導(dǎo)式會(huì)創(chuàng)建一個(gè) 100 萬元素的列表。
3. 列表推導(dǎo)式 vs 生成器表達(dá)式
特性 | 列表推導(dǎo)式 | 生成器表達(dá)式 |
---|---|---|
括號(hào) | 方括號(hào) [] | 圓括號(hào) () |
返回類型 | 列表 | 生成器 |
內(nèi)存消耗 | 會(huì)一次性加載所有元素到內(nèi)存中 | 每次迭代動(dòng)態(tài)生成,內(nèi)存占用小 |
適用場(chǎng)景 | 適合處理較小的數(shù)據(jù)集 | 適合處理大數(shù)據(jù)集或惰性計(jì)算 |
可修改性 | 生成的列表可以修改 | 生成器是只讀的,不能修改 |
4. 小結(jié)
- 列表推導(dǎo)式:用于創(chuàng)建新的列表,寫法簡(jiǎn)潔、執(zhí)行快速,適用于需要返回完整列表的場(chǎng)景。
- 生成器表達(dá)式:用于創(chuàng)建生成器,節(jié)省內(nèi)存,適合處理大數(shù)據(jù)集或惰性計(jì)算的場(chǎng)景。
掌握列表推導(dǎo)式與生成器,不僅可以讓代碼更加簡(jiǎn)潔易讀,還能有效提升代碼性能,在不同的應(yīng)用場(chǎng)景中選擇合適的工具將大大提高代碼效率。
到此這篇關(guān)于python實(shí)現(xiàn)列表推導(dǎo)式與生成器的文章就介紹到這了,更多相關(guān)python 列表推導(dǎo)式與生成器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python小知識(shí)之幾種推導(dǎo)式用法示例
- Python列表推導(dǎo)式詳解
- Python進(jìn)階之列表推導(dǎo)與生成器表達(dá)式詳解
- python基礎(chǔ)操作列表推導(dǎo)式
- Python列表推導(dǎo)式的基本操作詳解
- Python使用列表推導(dǎo)式快速生成列表
- Python的列表推導(dǎo)式實(shí)例詳細(xì)解析
- Python基礎(chǔ)知識(shí)之推導(dǎo)式詳解
- Python特性之列表推導(dǎo)式和生成器表達(dá)式詳解
- Python中列表乘法和列表推導(dǎo)式的區(qū)別舉例詳解
- Python 推導(dǎo)表達(dá)式的幾種方法實(shí)現(xiàn)
相關(guān)文章
Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例
在本篇文章里小編給大家整理了關(guān)于Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2020-02-02python3+django2開發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過程詳解
這篇文章主要介紹了python3+django2開發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python count函數(shù)使用方法實(shí)例解析
這篇文章主要介紹了Python count函數(shù)使用方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03使用Python實(shí)現(xiàn)獲取文件詳細(xì)信息
Python提供了豐富的內(nèi)置模塊和函數(shù),獲取和操作文件的各種屬性信息,比如大小、修改時(shí)間、權(quán)限以及路徑等,本文將通過詳細(xì)的示例代碼展示如何使用Python中的os和os.path模塊來獲取文件屬性信息,需要的可以參考下2023-12-12Python實(shí)現(xiàn)的排列組合計(jì)算操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的排列組合計(jì)算操作,涉及Python數(shù)學(xué)運(yùn)算的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2017-10-10在Python中append以及extend返回None的例子
今天小編就為大家分享一篇在Python中append以及extend返回None的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python調(diào)用本地大模型實(shí)現(xiàn)Excel表格數(shù)據(jù)匹配與填充
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用本地大模型實(shí)現(xiàn)Excel表格數(shù)據(jù)匹配與填充功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-05-05