最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python推導(dǎo)式Comprehensions的終極入門指南

 更新時(shí)間:2025年12月30日 09:04:53   作者:小莊-Python辦公  
在 Python 的世界里,你經(jīng)常會(huì)聽到Pythonic,而推導(dǎo)式正是 Pythonic 代碼的典型代表,本文將帶你從零開始,系統(tǒng)地掌握 Python 中的列表、字典、集合推導(dǎo)式以及生成器表達(dá)式,希望對(duì)大家有所幫助

1. 前言:為什么要學(xué)習(xí)推導(dǎo)式?

在 Python 的世界里,你經(jīng)常會(huì)聽到一個(gè)詞——Pythonic(具有 Python 風(fēng)格的)。它代表了代碼的簡(jiǎn)潔、優(yōu)雅和高效。而推導(dǎo)式(Comprehensions)正是 Pythonic 代碼的典型代表。

作為初學(xué)者,你可能習(xí)慣使用傳統(tǒng)的 for 循環(huán)來(lái)創(chuàng)建列表或處理數(shù)據(jù)。雖然這沒有錯(cuò),但 Python 提供了一種更強(qiáng)大的工具,能讓你用一行代碼完成過去需要三四行才能做到的事情,而且通常運(yùn)行速度更快。

本文將帶你從零開始,系統(tǒng)地掌握 Python 中的列表、字典、集合推導(dǎo)式以及生成器表達(dá)式。

2. 預(yù)備知識(shí)

在開始之前,請(qǐng)確保你已經(jīng)了解以下基礎(chǔ)概念:

  • 列表 (List)、字典 (Dictionary)集合 (Set) 的基本用法。
  • for 循環(huán) 的基本結(jié)構(gòu)。
  • if 條件語(yǔ)句 的基本用法。

3. 核心指南:一步步掌握推導(dǎo)式

3.1 列表推導(dǎo)式 (List Comprehensions)

這是最常用的一種推導(dǎo)式。它的核心目的是:基于一個(gè)現(xiàn)有的列表(或可迭代對(duì)象),通過某種運(yùn)算或篩選,創(chuàng)建一個(gè)新的列表。

傳統(tǒng)寫法 vs. 推導(dǎo)式寫法

假設(shè)我們需要?jiǎng)?chuàng)建一個(gè)包含 0 到 9 的平方數(shù)的列表。

傳統(tǒng)寫法 (for 循環(huán) + append):

squares = []
for x in range(10):
    squares.append(x * x)

print(squares)
# 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

推導(dǎo)式寫法:

squares = [x * x for x in range(10)]

print(squares)
# 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

語(yǔ)法解構(gòu)

列表推導(dǎo)式的基本語(yǔ)法如下:

[表達(dá)式 for 變量 in 可迭代對(duì)象]

  • [...]: 方括號(hào)表示結(jié)果是一個(gè)列表。
  • x * x (表達(dá)式): 這是你希望放入新列表的元素(也就是 append 里的內(nèi)容)。
  • for x in range(10): 循環(huán)邏輯,定義數(shù)據(jù)的來(lái)源。

進(jìn)階:帶條件的列表推導(dǎo)式

如果你只想保留符合特定條件的元素(例如,只計(jì)算偶數(shù)的平方),該怎么辦?

語(yǔ)法:

[表達(dá)式 for 變量 in 可迭代對(duì)象 if 條件]

示例代碼:

# 只計(jì)算 0-9 中偶數(shù)的平方
even_squares = [x * x for x in range(10) if x % 2 == 0]

print(even_squares)
# 輸出: [0, 4, 16, 36, 64]

注意:這里的 if 語(yǔ)句相當(dāng)于過濾器,只有滿足條件的 x 才會(huì)進(jìn)入表達(dá)式計(jì)算。

3.2 字典推導(dǎo)式 (Dictionary Comprehensions)

除了列表,Python 也允許你快速構(gòu)建字典。

語(yǔ)法:

{鍵表達(dá)式: 值表達(dá)式 for 變量 in 可迭代對(duì)象}

注意這里使用的是花括號(hào) {},并且包含冒號(hào) : 來(lái)分隔鍵和值。

示例:將列表轉(zhuǎn)換為字典

假設(shè)你有兩個(gè)列表,一個(gè)是名字,一個(gè)是年齡,你想把它們合并成一個(gè)字典。

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 18]

# 使用 zip 函數(shù)將兩個(gè)列表打包
user_dict = {name: age for name, age in zip(names, ages)}

print(user_dict)
# 輸出: {'Alice': 24, 'Bob': 30, 'Charlie': 18}

示例:篩選字典

提取所有年齡大于 20 的用戶:

adults = {name: age for name, age in user_dict.items() if age > 20}

print(adults)
# 輸出: {'Alice': 24, 'Bob': 30}

3.3 集合推導(dǎo)式 (Set Comprehensions)

集合(Set)的特點(diǎn)是無(wú)序且不重復(fù)。集合推導(dǎo)式的語(yǔ)法與字典推導(dǎo)式非常相似,也是使用花括號(hào) {},但沒有冒號(hào)。

語(yǔ)法:

{表達(dá)式 for 變量 in 可迭代對(duì)象}

示例:由列表生成去重后的集合

raw_data = [1, 2, 2, 3, 4, 4, 5]

# 提取數(shù)據(jù)并計(jì)算平方,自動(dòng)去重
unique_squares = {x * x for x in raw_data}

print(unique_squares)
# 輸出: {1, 4, 9, 16, 25} (順序可能不同,因?yàn)榧鲜菬o(wú)序的)

3.4 特別篇:生成器表達(dá)式 (Generator Expressions)

這是一個(gè)經(jīng)常被初學(xué)者忽略但極其重要的概念。如果你將列表推導(dǎo)式的方括號(hào) [] 換成圓括號(hào) (),你得到的不是元組(Tuple),而是一個(gè)生成器(Generator)

語(yǔ)法:

(表達(dá)式 for 變量 in 可迭代對(duì)象)

區(qū)別在于內(nèi)存占用:

  • 列表推導(dǎo)式:一次性生成所有數(shù)據(jù),放入內(nèi)存。如果數(shù)據(jù)量有一億條,內(nèi)存可能會(huì)爆掉。
  • 生成器表達(dá)式惰性求值(Lazy Evaluation)。它不會(huì)立刻計(jì)算結(jié)果,而是當(dāng)你需要下一個(gè)數(shù)據(jù)時(shí)(比如在循環(huán)中),它才臨時(shí)計(jì)算。

示例:

# 創(chuàng)建生成器
gen = (x * x for x in range(5))

print(gen)
# 輸出: <generator object <genexpr> at 0x...> (看不到具體數(shù)據(jù))

# 獲取數(shù)據(jù)
for val in gen:
    print(val)
# 依次輸出: 0, 1, 4, 9, 16

最佳實(shí)踐:如果你處理的數(shù)據(jù)量非常大,或者你只需要遍歷一次數(shù)據(jù),請(qǐng)優(yōu)先使用生成器表達(dá)式。

4. 常見誤區(qū)與注意事項(xiàng)

雖然推導(dǎo)式很強(qiáng)大,但“能力越大,責(zé)任越大”。以下是初學(xué)者容易犯的錯(cuò)誤:

4.1 避免過度嵌套

推導(dǎo)式可以嵌套(即推導(dǎo)式里套推導(dǎo)式),但這會(huì)極大地降低代碼的可讀性。

反面教材(難以閱讀):

# 扁平化一個(gè)矩陣
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [num for row in matrix for num in row] # 這種雙重循環(huán)在一行里很容易看暈

如果邏輯超過了兩層循環(huán)或包含了復(fù)雜的條件判斷,請(qǐng)直接使用普通的 for 循環(huán)。代碼是寫給人看的,不僅僅是給機(jī)器執(zhí)行的。

4.2 別為了“炫技”而使用

不要在推導(dǎo)式中執(zhí)行帶有“副作用”的操作(例如 print() 函數(shù))。推導(dǎo)式的初衷是創(chuàng)建新的數(shù)據(jù)結(jié)構(gòu),而不是用來(lái)執(zhí)行流程控制。

錯(cuò)誤示范:

[print(x) for x in range(5)] # 這是一個(gè)糟糕的寫法!

正確做法:

for x in range(5):
    print(x)

5. 總結(jié)

恭喜你!你已經(jīng)掌握了 Python 中提升代碼質(zhì)量的利器。讓我們回顧一下核心要點(diǎn):

  • 列表推導(dǎo)式 [...]:最常用的替代 for 循環(huán)創(chuàng)建列表的方法。
  • 字典推導(dǎo)式 {k:v ...}:快速構(gòu)建或轉(zhuǎn)換字典。
  • 集合推導(dǎo)式 {...}:用于去重和集合運(yùn)算。
  • 生成器表達(dá)式 (...):節(jié)省內(nèi)存,適合處理大數(shù)據(jù)。
  • 核心原則:保持簡(jiǎn)潔。如果一行代碼寫不下或讀不懂,就換回普通的循環(huán)。

下一步行動(dòng)建議:打開你之前的 Python 代碼,找出一個(gè)使用了 for 循環(huán)和 append 來(lái)創(chuàng)建列表的地方,嘗試將其重構(gòu)為列表推導(dǎo)式。這將是你邁向 Python 高手的第一步!

到此這篇關(guān)于Python推導(dǎo)式Comprehensions的終極入門指南的文章就介紹到這了,更多相關(guān)Python推導(dǎo)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?selenium?find_element()示例詳解

    Python?selenium?find_element()示例詳解

    selenium定位元素的函數(shù)/方法可以分為兩類:find_element及find_elements,下面這篇文章主要給大家介紹了關(guān)于Python?selenium?find_element()的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 使用Python?+?Tkinter打造“貓狗大戰(zhàn)“回合制策略游戲全過程

    使用Python?+?Tkinter打造“貓狗大戰(zhàn)“回合制策略游戲全過程

    程序員和游戲愛好者可以充分利用Python的簡(jiǎn)潔性和強(qiáng)大的Tkinter庫(kù)來(lái)創(chuàng)建一個(gè)完整的回合制戰(zhàn)斗游戲,這篇文章主要介紹了使用Python+Tkinter打造“貓狗大戰(zhàn)“回合制策略游戲的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2026-03-03
  • python編程進(jìn)階之異常處理用法實(shí)例分析

    python編程進(jìn)階之異常處理用法實(shí)例分析

    這篇文章主要介紹了python編程進(jìn)階之異常處理用法,結(jié)合實(shí)例形式分析了python異常捕獲、處理相關(guān)語(yǔ)句、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • 詳解如何用Python實(shí)現(xiàn)感知器算法

    詳解如何用Python實(shí)現(xiàn)感知器算法

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著如何用Python實(shí)現(xiàn)感知器算法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • python安裝cx_Oracle模塊常見問題與解決方法

    python安裝cx_Oracle模塊常見問題與解決方法

    這篇文章主要介紹了python安裝cx_Oracle模塊常見問題與解決方法,舉例分析了Python在Windows平臺(tái)與Linux平臺(tái)安裝cx_Oracle模塊常見問題、解決方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • Python使用from?import導(dǎo)入模塊中的指定內(nèi)容

    Python使用from?import導(dǎo)入模塊中的指定內(nèi)容

    在編程的世界里,模塊化是構(gòu)建健壯應(yīng)用的核心原則之一,而from?import語(yǔ)句,正是讓這種高效導(dǎo)入變得優(yōu)雅的關(guān)鍵工具,今天,我們將深入探索from?import的方方面面,從基礎(chǔ)語(yǔ)法到高級(jí)技巧,需要的朋友可以參考下
    2026-06-06
  • 使用python生成各種常見條形碼及二維碼

    使用python生成各種常見條形碼及二維碼

    條形碼和二維碼是現(xiàn)代信息交換和數(shù)據(jù)存儲(chǔ)的重要工具,它們將信息以圖形的形式編碼,便于機(jī)器識(shí)別和數(shù)據(jù)處理,本文將介紹如何使用Python快速生成各種常見的條形碼如Code 128、EAN-13,以及生成二維碼,需要的朋友可以參考下
    2024-07-07
  • Python中使用zip函數(shù)的七重境界解析

    Python中使用zip函數(shù)的七重境界解析

    這篇文章主要介紹了Python中使用zip函數(shù)的七重境界,重點(diǎn)介紹了Python中功能強(qiáng)大的zip 函數(shù)的多種用法,并給出了相應(yīng)的代碼示例,需要的朋友可以參考下
    2022-12-12
  • Python視頻處理模塊之moviepy的用法教程

    Python視頻處理模塊之moviepy的用法教程

    隨著自媒體時(shí)代,現(xiàn)在對(duì)視頻的處理變得越來(lái)越常見。而?Python?有一個(gè)專門用于處理視頻的第三方庫(kù):moviepy,可以非常方便地對(duì)視頻進(jìn)行一些簡(jiǎn)單處理,下面我們就來(lái)看一看
    2022-07-07
  • python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

永靖县| 视频| 阿拉善左旗| 天柱县| 郎溪县| 白朗县| 宣城市| 长岭县| 乌兰察布市| 怀宁县| 平潭县| 万年县| 泸州市| 定结县| 吴川市| 延庆县| 时尚| 河源市| 天镇县| 平乡县| 甘德县| 屏山县| 招远市| 淄博市| 磐安县| 玉龙| 都江堰市| 大新县| 虎林市| 聂荣县| 鹿邑县| 玉田县| 连云港市| 娱乐| 许昌县| 汾西县| 黑河市| 瓮安县| 忻州市| 喀喇沁旗| 海丰县|