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

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

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

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

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

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

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

2. 預(yù)備知識

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

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

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

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

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

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

假設(shè)我們需要創(chuàng)建一個包含 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]

語法解構(gòu)

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

[表達式 for 變量 in 可迭代對象]

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

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

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

語法:

[表達式 for 變量 in 可迭代對象 if 條件]

示例代碼:

# 只計算 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 語句相當(dāng)于過濾器,只有滿足條件的 x 才會進入表達式計算。

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

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

語法:

{鍵表達式: 值表達式 for 變量 in 可迭代對象}

注意這里使用的是花括號 {},并且包含冒號 : 來分隔鍵和值。

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

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

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

# 使用 zip 函數(shù)將兩個列表打包
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)的特點是無序且不重復(fù)。集合推導(dǎo)式的語法與字典推導(dǎo)式非常相似,也是使用花括號 {},但沒有冒號。

語法:

{表達式 for 變量 in 可迭代對象}

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

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

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

print(unique_squares)
# 輸出: {1, 4, 9, 16, 25} (順序可能不同,因為集合是無序的)

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

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

語法:

(表達式 for 變量 in 可迭代對象)

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

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

示例:

# 創(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ù)據(jù)量非常大,或者你只需要遍歷一次數(shù)據(jù),請優(yōu)先使用生成器表達式。

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

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

4.1 避免過度嵌套

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

反面教材(難以閱讀):

# 扁平化一個矩陣
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ù)雜的條件判斷,請直接使用普通的 for 循環(huán)。代碼是寫給人看的,不僅僅是給機器執(zhí)行的。

4.2 別為了“炫技”而使用

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

錯誤示范:

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

正確做法:

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

5. 總結(jié)

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

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

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

到此這篇關(guān)于Python推導(dǎo)式Comprehensions的終極入門指南的文章就介紹到這了,更多相關(guān)Python推導(dǎo)式內(nèi)容請搜索腳本之家以前的文章或繼續(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的簡潔性和強大的Tkinter庫來創(chuàng)建一個完整的回合制戰(zhàn)斗游戲,這篇文章主要介紹了使用Python+Tkinter打造“貓狗大戰(zhàn)“回合制策略游戲的相關(guān)資料,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2026-03-03
  • python編程進階之異常處理用法實例分析

    python編程進階之異常處理用法實例分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

宜阳县| 竹溪县| 大石桥市| 双江| 辽阳县| 天台县| 阜阳市| 聊城市| 淮北市| 太康县| 泰来县| 垣曲县| 云龙县| 辰溪县| 昆山市| 芒康县| 衡山县| 扶风县| 肥城市| 新晃| 东台市| 察哈| 分宜县| 天柱县| 余姚市| 潮州市| 乐业县| 察隅县| 鲜城| 静乐县| 德安县| 广东省| 盱眙县| 连江县| 儋州市| 当阳市| 衡阳市| 衡阳县| 林甸县| 洛浦县| 岗巴县|