Python列表推導(dǎo)式的基本操作詳解
Python 的列表推導(dǎo)式,這個(gè)看似簡單的語法糖,實(shí)則內(nèi)含無限威力。在 Python 代碼編寫中,列表推導(dǎo)式的靈活性和簡潔性讓它成為了不可或缺的一部分。在這篇文章中,我們將更全面、更深入地探討列表推導(dǎo)式,從基礎(chǔ)的概念認(rèn)識,到各類進(jìn)階的用法和操作,我們一一揭秘。最后,我們還將在 "One More Thing" 部分分享一個(gè)非常有趣且實(shí)用的列表推導(dǎo)式技巧,這會讓你在編程道路上又多一份強(qiáng)大的工具。
1. 列表推導(dǎo)式:語法糖的力量
列表推導(dǎo)式,就是一種在 Python 中創(chuàng)建列表的方式,它的基礎(chǔ)形式如下:
[expression for item in iterable]
它實(shí)質(zhì)上是一個(gè) for 循環(huán)的簡化形式。例如,我們可以用它來創(chuàng)建一個(gè)包含 0 到 9 平方的列表:
squares = [x**2 for x in range(10)] print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
這樣,你不需要再使用傳統(tǒng)的 for 循環(huán)來創(chuàng)建列表,代碼更加簡潔和清晰。
2. 過濾元素:帶條件的列表推導(dǎo)式
列表推導(dǎo)式更強(qiáng)大的地方在于,我們可以在其中加入條件判斷,以過濾出我們想要的元素:
even_squares = [x**2 for x in range(10) if x % 2 == 0] print(even_squares) # Output: [0, 4, 16, 36, 64]
在這個(gè)例子中,我們只生成了偶數(shù)的平方,只需加入一個(gè)簡單的 if 條件,我們就可以靈活地過濾出我們需要的元素。
3. 復(fù)雜的數(shù)據(jù)結(jié)構(gòu):嵌套的列表推導(dǎo)式
更進(jìn)一步,列表推導(dǎo)式還可以嵌套使用,處理更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如我們要將一個(gè)嵌套列表展平:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened_list = [x for sublist in nested_list for x in sublist] print(flattened_list) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
這個(gè)例子中,我們將一個(gè)二維的嵌套列表展平成了一維列表,就像是將多層次的數(shù)據(jù)展開,方便我們進(jìn)行后續(xù)處理。
4. 數(shù)據(jù)變形:帶表達(dá)式的列表推導(dǎo)式
列表推導(dǎo)式中的表達(dá)式可以幫助我們對數(shù)據(jù)進(jìn)行變形:
strings = ['Hello', 'World', 'In', 'Python'] lowercase_strings = [s.lower() for s in strings] print(lowercase_strings) # Output: ['hello', 'world', 'in', 'python']
在這個(gè)例子中,我們將一個(gè)包含幾個(gè)字符串的列表,通過 str.lower()
函數(shù),將其轉(zhuǎn)換成了全小寫。通過改變表達(dá)式,我們可以在生成新列表的同時(shí),對數(shù)據(jù)進(jìn)行各種變形操作。
5. 推廣至其他數(shù)據(jù)結(jié)構(gòu):字典和集合的推導(dǎo)式
推導(dǎo)式不僅僅可以應(yīng)用于列表,還可以推廣到字典和集合中:
squared_dict = {x: x**2 for x in range(5)} print(squared_dict) # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} squared_set = {x**2 for x in range(5)} print(squared_set) # Output: {0, 1, 4, 16, 9}
這兩個(gè)例子分別演示了字典推導(dǎo)式和集合推導(dǎo)式的用法,這些結(jié)構(gòu)的推導(dǎo)式可以更方便我們處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
6. 性能優(yōu)化:列表推導(dǎo)式與 map/filter 的比較
列表推導(dǎo)式不僅代碼更加簡潔,實(shí)際上在很多情況下,列表推導(dǎo)式的執(zhí)行效率也優(yōu)于傳統(tǒng)的 map
或 filter
函數(shù):
import time # Using list comprehension start_time = time.time() squares = [x**2 for x in range(1000000)] end_time = time.time() print(f"List comprehension took {end_time - start_time} seconds") # Using map function start_time = time.time() squares = list(map(lambda x: x**2, range(1000000))) end_time = time.time() print(f"Map function took {end_time - start_time} seconds")
在這個(gè)例子中,我們分別用列表推導(dǎo)式和 map
函數(shù)創(chuàng)建一個(gè)包含一百萬個(gè)元素的列表,可以看到列表推導(dǎo)式的執(zhí)行時(shí)間通常要少于 map
函數(shù)。
One More Thing
在我的 GitHub 學(xué)習(xí)過程以及在各種技術(shù)博客中閱讀,我發(fā)現(xiàn)一個(gè)關(guān)于列表推導(dǎo)式的有趣且實(shí)用的技巧,那就是使用列表推導(dǎo)式實(shí)現(xiàn)全排列:
perms = [(x, y, z) for x in range(3) for y in range(3) for z in range(3) if x != y and y != z and x != z] print(perms) # Output: [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
這個(gè)例子通過列表推導(dǎo)式生成了 3 個(gè)元素的全排列,使用了嵌套循環(huán)和條件判斷,非常簡潔而高效。
總的來說,Python 的列表推導(dǎo)式是一個(gè)非常強(qiáng)大而靈活的工具,能夠幫助我們更好地處理數(shù)據(jù)和創(chuàng)建數(shù)據(jù)結(jié)構(gòu)。希望這篇文章能幫助你更深入地理解和應(yīng)用列表推導(dǎo)式,讓你的 Python 代碼更加簡潔和高效。
到此這篇關(guān)于Python列表推導(dǎo)式的基本操作詳解的文章就介紹到這了,更多相關(guān)Python列表推導(dǎo)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python小知識之幾種推導(dǎo)式用法示例
- Python列表推導(dǎo)式詳解
- Python進(jìn)階之列表推導(dǎo)與生成器表達(dá)式詳解
- python基礎(chǔ)操作列表推導(dǎo)式
- Python使用列表推導(dǎo)式快速生成列表
- Python的列表推導(dǎo)式實(shí)例詳細(xì)解析
- Python基礎(chǔ)知識之推導(dǎo)式詳解
- Python特性之列表推導(dǎo)式和生成器表達(dá)式詳解
- python實(shí)現(xiàn)列表推導(dǎo)式與生成器
- Python中列表乘法和列表推導(dǎo)式的區(qū)別舉例詳解
- Python 推導(dǎo)表達(dá)式的幾種方法實(shí)現(xiàn)
相關(guān)文章
python opencv pytesseract 驗(yàn)證碼識別的實(shí)現(xiàn)
這篇文章主要介紹了python opencv pytesseract 驗(yàn)證碼識別的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python 實(shí)現(xiàn)自動獲取種子磁力鏈接方式
今天小編就為大家分享一篇Python 實(shí)現(xiàn)自動獲取種子磁力鏈接方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python針對給定列表中元素進(jìn)行翻轉(zhuǎn)操作的方法分析
這篇文章主要介紹了Python針對給定列表中元素進(jìn)行翻轉(zhuǎn)操作的方法,結(jié)合實(shí)例形式分析了Python針對列表元素基于切片及遍歷輸出兩種翻轉(zhuǎn)操作實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04python實(shí)現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法
這篇文章主要介紹了python實(shí)現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法,涉及Python針對文件操作與編碼轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-08-08Python異常處理:try、except、else、finally的全面解析
在Python中,異常是程序在運(yùn)行時(shí)發(fā)生的錯誤,當(dāng)Python解釋器遇到一個(gè)它不能處理的錯誤時(shí),它會拋出一個(gè)異常,異常處理的主要目的是在程序遇到錯誤時(shí),提供一種方法來處理這些錯誤,而不是簡單地讓程序崩潰,本文介紹了Python異常處理:try、except、else、finally的全面解析2024-07-07Pytorch中view()函數(shù)的實(shí)現(xiàn)示例
view函數(shù)是一個(gè)極為重要的張量操作函數(shù),本文主要介紹了Pytorch中view()函數(shù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2025-05-05pytest-sugar?執(zhí)行過程中顯示進(jìn)度條的腳本分享
Pytest-sugar是一款用來改善控制臺顯示的插件,增加了進(jìn)度條顯示,使得在用例執(zhí)行過程中可以看到進(jìn)度條,而且進(jìn)度條是根據(jù)用例是否通過標(biāo)注不同顏色,非常醒目,接下來通過本文給大家分享下pytest?sugar?顯示進(jìn)度條的腳本,感興趣的朋友一起看看吧2022-12-12python實(shí)現(xiàn)在sqlite動態(tài)創(chuàng)建表的方法
這篇文章主要介紹了python實(shí)現(xiàn)在sqlite動態(tài)創(chuàng)建表的方法,涉及Python操作SQLite數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)表的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05利用selenium 3.7和python3添加cookie模擬登陸的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于利用selenium 3.7和python3添加cookie模擬登陸的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11