Python語法學習之 - 生成器表達式(Generator Expression)

第一次見這樣的語法

本人之前一直是Java工程師,最近接觸了一個Python項目,第一次看到如下的代碼:

i = sum(letter in target_arr for letter in source_arr)

這條語句是計算source 與 target 數組中有幾個單詞是相同的。

當我第一眼看到這樣的寫法的時候,我的第一感覺是這樣的。
還可以這樣寫?
我讀書少,見識少,那是真不懂,于是趕緊孤狗一下,想要一探究竟。

原來這叫:生成器表達式

生成器表達式語法

生成器表達式(Generator Expression)是一種簡潔高效地創建迭代器(Iterator)的方式。它類似于列表推導式(List Comprehension),但生成器表達式使用圓括號 () 而不是方括號 []。
生成器表達式的語法
(expression for item in iterable if condition)

  • expression:對每個元素進行的操作,生成迭代器中的值。

  • item:迭代變量,表示可迭代對象 iterable 中的每個元素。

  • iterable:可迭代對象,例如列表、元組、字符串等。

  • condition:可選的過濾條件,只有滿足條件的元素才會被處理。
    生成器表達式的特點

  • 惰性求值: 生成器表達式不會一次性計算所有元素,而是按需生成。這樣可以節省內存,特別是在處理大量數據時。

  • 返回迭代器: 生成器表達式返回一個迭代器對象,可以通過 for 循環或 next() 函數來遍歷其中的元素。

  • 不可索引: 迭代器不支持索引操作,不能像列表那樣通過下標訪問元素。
    生成器表達式的應用

  • 過濾數據:
    even_numbers = (x for x in range(10) if x % 2 == 0) # 偶數

  • 映射數據:
    squares = (x**2 for x in range(5)) # 平方數

  • 組合數據:
    pairs = ((x, y) for x in [1, 2] for y in [3, 4]) # [(1, 3), (1, 4), (2, 3), (2, 4)]

  • 傳遞給函數:
    sum(x for x in range(100) if x % 3 == 0) # 3 的倍數之和

生成器表達式 vs. 列表推導式

特點生成器表達式列表推導式
返回值迭代器對象列表
惰性求值
內存占用
適用場景處理大量數據、只需遍歷一次的數據需要多次訪問數據、需要索引操作的數據

案例分析

回到我們的案例中來,我們根據語法解釋對我們文章開始的案例進行拆解。

i = sum(letter in target_arr for letter in source_arr)

(expression for item in iterable if condition)對應關系

語法元素生成器表達式中的元素解釋
expressionletter in target_arr對于每個 letter,判斷它是否存在于target_arr 中,返回布爾值
itemletter迭代變量,表示 source_arr 中的每個元素
iterablesource_arr可迭代對象,源字符串數組
condition(無)此處沒有過濾條件,所有 letter 都會被處理

總結

  • 生成器表達式會遍歷 source_arr 中的每個 letter。
  • 對于每個 letter,計算 letter in target_arr,得到一個布爾值(True 或 False)。
  • sum 函數將這些布爾值相加,得到匹配的總次數,即 match_score。

注意事項

  • 這里沒有使用 if condition 部分,表示不對元素進行過濾,所有元素都會參與計算。
  • 由于 Python 中 True 被視為 1,False 被視為 0,所以 sum 函數可以直接對布爾值求和。

希望這個詳細的語法講解能幫助您更好地理解生成器表達式的語法和用法!

關注我的公眾號

歡迎大家關注、點贊、轉發,一起交流軟件開發、架構設計、云原生技術。
TXZQ聊IT技術與架構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14399.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14399.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell遍歷路徑所有文件并把列表寫成字符串遍歷

1. ls dir/* | tr ‘\n’ ’ ’ 換行替換成空格 你可以使用 ls 命令和 tr 命令來將文件列表根據空格拼接起來成一個字符串。以下是一個示例: ls dir/* | tr \n 解釋 ls dir/*:列出 dir 目錄下的所有文件。tr \n :將所有的換行符&#xf…

ChatGPT生成常見面試題【面試準備】

ChatGPT生成常見面試題【面試準備】 前言版權ChatGPT生成常見面試題【面試準備】MySQL面試問題與回答1. 數據庫連接與操作2. 索引和查詢優化3. 事務管理4. 索引是什么?為什么使用索引可以提高查詢性能?如何在MySQL中創建索引?5. SQL查詢優化有…

Varjo XR-4功能詳解:由凝視驅動的XR自動對焦相機系統

Varjo是XR市場中擁有領先技術的虛擬現實設備供應商,其將可變焦距攝像機直通系統帶入到虛擬和混合現實場景中。在本篇文章中,Varjo的技術工程師維爾蒂莫寧詳細介紹了這項在Varjo XR-4焦點版中投入應用的技術。 對可變焦距光學系統的需求 目前所有其他XR頭…

WPF之容器標簽之Canvas布局標簽

Canvas: 定義一個區域&#xff0c;可在其中使用相對于 Canvas 區域的坐標以顯式方式來定位子元素。 實例 可以在子標簽使用Canvas屬性設置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

網頁抓取之requests庫的使用

Python網絡數據采集利器 - Requests庫的使用指南 簡介 在Python網絡爬蟲領域,優秀的第三方庫Requests可謂是必學的重要工具。它提供了相當人性化的API,讓我們能夠用極其簡潔的代碼發送HTTP/HTTPS請求,并且自動處理cookies、headers、編碼等諸多繁瑣細節,大大減輕了網頁抓取的…

【pdb的使用方法】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、 pdb 是什么&#xff1f;二、基本用法1.啟動 PDB 調試器&#xff1a;2.單步執行代碼&#xff1a;3.查看變量值&#xff1a;4.退出調試器&#xff1a; 三、高級用…

指數分布的理解,推導與應用

指數分布的定義 在浙大版的教材中&#xff0c;指數分布的定義如下&#xff1a; 若連續型的隨機變量 X X X的概率密度為&#xff1a; f ( x ) { 1 θ e ? x θ , x>0 0 , 其他 f(x) \begin{cases} \frac{1}{\theta} e^{-\frac{x}{\theta}}, & \text{x>0}\\ 0, &a…

mvn編譯所有單元測試報錯OOM

org.mockito.exceptions.base.MockitoException: Cannot instantiate InjectMocks field named ‘productLogic’ of type ‘class .ProductLogic’. You haven’t provided the instance at field declaration so I tried to construct the instance. However the constructo…

Python正則表達式與Excel文件名批量匹配技術文章

目錄 引言 正則表達式基礎 Python中的re模塊 Excel文件名批量匹配案例 常見問題與解決方案 結論 引言 在現代辦公環境中&#xff0c;Excel文件幾乎成為了數據分析和處理的標配工具。由于Excel文件可能包含大量的數據和信息&#xff0c;因此&#xff0c;對Excel文件的命名…

在aspNetCore中 使用System.Text.Json的定制功能, 將定制化的json返回給前端

C# 默認大寫, 而大部分的前端默認小寫, 這時候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

DSPF網絡類型實驗1

對R6配置 對R1配置 對R2 對R3 對R4 對R5 對R1R2R3R4R5加用戶 環回處理 然后開始配置缺省 R1有兩個下一跳 3&#xff0c;4&#xff0c;5同R2 然后對R1 dynamic動態 對R2 手寫 把注冊加上 register R3同R2處理

機柜里面的設備有哪些

一、服務器 服務器是機柜中最常見的設備之一。它們通常被用于存儲和運行數據、應用程序和服務。不同的服務器通常使用不同的操作系統和處理器架構&#xff0c;以滿足不同的需求。服務器可以使用冗余電源和冗余存儲空間等措施&#xff0c;以確保數據安全和可靠性。 二、交換機 交…

刪除鏈表的倒數第N個節點-力扣

第一種方法是使用前后指針&#xff0c;前指針先向前走n1步&#xff0c;然后前后指針同時向前&#xff0c;當前指針指向NULL時&#xff0c;后指針正好指向需要刪除的節點的前一個節點&#xff0c;操作后指針刪除即可。 代碼如下&#xff1a; /*** Definition for singly-linked…

醫學圖像分割

論文&#xff1a;Medical Image Segmentation Using Deep Learning: A Survey 參考&#xff1a;[醫學圖像分割綜述] Medical Image Segmentation Using Deep Learning: A Survey-CSDN博客 一、背景 特征表示的困難&#xff1a;模糊、噪聲、對比度低--->CNN屬于語義分割&a…

Web Server項目實戰2-Linux上的五種IO模型

上一節內容的補充&#xff1a;I/O多路復用是同步的&#xff0c;只有調用某些API才是異步的 Unix/Linux上的五種IO模型 a.阻塞 blocking 調用者調用了某個函數&#xff0c;等待這個函數返回&#xff0c;期間什么也不做&#xff0c;不停地去檢查這個函數有沒有返回&#xff0c…

Offline RL : Beyond Reward: Offline Preference-guided Policy Optimization

ICML 2023 paper code preference based offline RL&#xff0c;基于HIM&#xff0c;不依靠額外學習獎勵函數 Intro 本研究聚焦于離線偏好引導的強化學習&#xff08;Offline Preference-based Reinforcement Learning, PbRL&#xff09;&#xff0c;這是傳統強化學習&#x…

輕量音樂網站程序源碼,在線音樂免費聽歌

這是一個高品質的音樂共享和流媒體平臺&#xff0c;用戶可以在這個網站上免費在線聽歌。這個輕量級的音樂網站程序源碼&#xff0c;是您創建自己的音樂流媒體網站的最佳選擇&#xff01;它還支持制作插件&#xff0c;并且在更新后&#xff0c;您可以保留您的自定義設置。 下 載…

操作系統408考研-經典例題

什么是操作系統?答:操作系統,是計算機系統中最基本、最重要的系統軟件,是其它軟件 的***支撐***。控制和管理計算機系統的硬件和軟件資源,合理的組織計算機工 作流程,并為用戶使用計算機提供公共和基本的服務 2.多道程序 (multiprogrammming) 和多重處理 (multiprocessi…

Python基于PyQt6制作GUI界面——多選框

QCheckBox 是 PyQt6 中的一個復選框控件&#xff0c;它允許用戶通過單擊來選擇或取消選擇某個選項。與 QRadioButton 不同&#xff0c;QCheckBox 控件并不互斥&#xff0c;這意味著用戶可以同時選擇多個 QCheckBox。示例對應的制作的 ui文件 界面如下所示。 <?xml version…