- 機(jī)械工程師Python編程:入門、實(shí)戰(zhàn)與進(jìn)階
- (西)安琪兒·索拉·奧爾巴塞塔
- 637字
- 2024-09-10 16:13:08
2.1.7 列表推導(dǎo)式
如前所述,在Python中我們可以使用列表推導(dǎo)式過(guò)濾和映射列表。在處理列表時(shí),這種形式通常比f(wàn)ilter和map函數(shù)更好,因?yàn)樗恼Z(yǔ)法更簡(jiǎn)潔和易讀。
列表推導(dǎo)式映射列表的語(yǔ)法結(jié)構(gòu)如下:

它分為兩個(gè)部分:
?for<item>in<list>是一個(gè)for循環(huán),負(fù)責(zé)迭代<list>中的元素;
?<expression>是一個(gè)映射表達(dá)式,負(fù)責(zé)將<item>映射到其他東西上。
讓我們重復(fù)之前做過(guò)的練習(xí),將一個(gè)名稱列表映射到每個(gè)名稱的長(zhǎng)度列表,這次使用列表推導(dǎo)式:

或許你已經(jīng)明白,為什么Python程序員傾向于使用列表推導(dǎo)式而非map函數(shù);上面的例子讀起來(lái)就像日常英語(yǔ):“name列表中(每個(gè))名稱的名稱長(zhǎng)度。”在本例中,for name in names遍歷原始列表中的名稱,然后將每個(gè)名稱的長(zhǎng)度(len(name))作為結(jié)果輸出。
使用列表推導(dǎo)式過(guò)濾列表,可以在推導(dǎo)式的末尾添加一個(gè)if子句:

例如,如果我們想過(guò)濾一個(gè)名稱列表,只保留以A開(kāi)頭的名稱,列表推導(dǎo)式可以這么寫:

本例中有兩點(diǎn)需要注意:映射表達(dá)式是name自身(恒等映射,映射后的對(duì)象不變),過(guò)濾操作使用了字符串的startswith方法。只有當(dāng)字符串以給定的參數(shù)作為前綴時(shí),此方法才會(huì)返回True。
我們可以在同一個(gè)列表推導(dǎo)式中進(jìn)行過(guò)濾和映射操作。例如,假設(shè)我們想過(guò)濾名稱列表中超過(guò)5個(gè)字母的名稱,然后構(gòu)造一個(gè)新的列表,其元素是原名稱及其長(zhǎng)度組成的元組。我們可以很容易地做到這一點(diǎn):

為了便于比較,讓我們看看如果使用filter和map函數(shù),會(huì)是什么樣子:

如你所見(jiàn),結(jié)果相同,但列表推導(dǎo)式的版本更簡(jiǎn)單易讀。越容易閱讀的東西也越容易維護(hù),因此列表推導(dǎo)式將是我們過(guò)濾和映射列表的首選方式。
現(xiàn)在讓我們將注意力轉(zhuǎn)向第二個(gè)范式:面向?qū)ο缶幊獭?/p>
- 工程軟件開(kāi)發(fā)技術(shù)基礎(chǔ)
- Android和PHP開(kāi)發(fā)最佳實(shí)踐(第2版)
- Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計(jì)
- 構(gòu)建移動(dòng)網(wǎng)站與APP:HTML 5移動(dòng)開(kāi)發(fā)入門與實(shí)戰(zhàn)(跨平臺(tái)移動(dòng)開(kāi)發(fā)叢書)
- 認(rèn)識(shí)編程:以Python語(yǔ)言講透編程的本質(zhì)
- Mastering Xamarin.Forms(Second Edition)
- HTML+CSS+JavaScript網(wǎng)頁(yè)設(shè)計(jì)從入門到精通 (清華社"視頻大講堂"大系·網(wǎng)絡(luò)開(kāi)發(fā)視頻大講堂)
- Domain-Driven Design in PHP
- Visual FoxPro 6.0程序設(shè)計(jì)
- Distributed Computing in Java 9
- 創(chuàng)意UI Photoshop玩轉(zhuǎn)移動(dòng)UI設(shè)計(jì)
- jQuery Mobile Web Development Essentials(Second Edition)
- Apache Solr for Indexing Data
- Mastering Data Analysis with R
- Developing Multi:Platform Apps with Visual Studio Code