【Python基础】Python列表生成式
作者 | Soner Y?ld?r?m
編譯? |VK
來源 | Towards Data Science
列表生成式是一種基于其他iterable(如集合、元組、其他列表等)創(chuàng)建列表的方法。它還可以用更簡單、更吸引人的語法表示for和if循環(huán)。不過,列表生成式比for循環(huán)要快得多。
列表生成式的基本結(jié)構(gòu)如下。
這看起來很簡單,但在某些情況下可能會變得棘手。在本文中,我們將從一個非常簡單的列表生成式開始,并逐步增加復(fù)雜性。我將清楚地解釋如何表示和生成式高度復(fù)雜的列表生成式。
在大多數(shù)情況下,列表生成式優(yōu)先于for和if循環(huán),因為
它們比for循環(huán)快得多。
它們被認(rèn)為比循環(huán)和映射函數(shù)更具python特性。
列表生成式的語法更容易閱讀。
讓我們從一個簡單的例子開始。
words?=?['data','science','machine','learning']我們要創(chuàng)建一個列表,其中包含單詞列表中每個單詞的長度。讓我們使用for循環(huán)和列表生成式來執(zhí)行任務(wù)。
#?for循環(huán) a?=?[] for?word?in?words:a.append(len(word))#?列表生成式 b?=?[len(word)?for?word?in?words]print(f"a?is?{a}") print(f"b?is?{b}")a?is?[4,?7,?7,?8] b?is?[4,?7,?7,?8]生成式列表語法的最佳方法是比較for和if循環(huán)。下圖演示了比較。
for循環(huán)末尾的表達(dá)式放在列表的開頭。
當(dāng)我們復(fù)習(xí)這些例子時,會更清楚。讓我們創(chuàng)建一個列表,其中包含單詞列表中長度大于5的項。
#?for循環(huán) a?=?[] for?word?in?words:if?len(word)?>?5:a.append(word)#?列表生成式 b?=?[word?for?word?in?words?if?len(word)?>?5]print(f"a?is?{a}") print(f"b?is?{b}")a?is?['science',?'machine',?'learning'] b?is?['science',?'machine',?'learning']下圖顯示了如何在列表中表示循環(huán)中的表達(dá)式。
與上一個示例一樣,在for循環(huán)末尾所做的事情被放在列表的開頭。在這種情況下,我們按原樣處理項。列表生成式的下一部分是循環(huán)中的第一個表達(dá)式,然后是循環(huán)中的第二個表達(dá)式。
循環(huán)中的邏輯更直觀。因此,與循環(huán)相比,列表生成式的結(jié)構(gòu)相對容易掌握。過一段時間,你就不必做一個明確的比較,因為你的大腦已經(jīng)習(xí)慣了。
下一個例子稍微復(fù)雜一些。我們要創(chuàng)建一個包含單詞列表項中所有“a”、“e”和“i”字母的列表。此任務(wù)涉及嵌套的for和if循環(huán)。
#?for循環(huán) a?=?[] for?word?in?words:for?letter?in?word:if?letter?in?["a","e","i"]:a.append(letter)讓我們詳細(xì)說明一下語法。我們反復(fù)瀏覽單詞表。對于每個項,我們遍歷字符。如果一個字符符合給定的條件,它將被附加到列表a中。
完成相同任務(wù)的列表生成式如下。
b?=?[letter?for?word?in?words?for?letter?in?word?if?letter?in?["a","e","i"]]我們從for循環(huán)中的最后一個表達(dá)式開始生成式列表。剩下的部分從循環(huán)的開頭開始。下圖說明了每個步驟。
結(jié)論
列表生成式是一種高效的操作。對于簡單的任務(wù),生成式的語法很容易,在復(fù)雜的情況下可能會變得棘手。
如果你很難創(chuàng)建或生成式復(fù)雜的列表生成式,請嘗試使用循環(huán)編寫。
需要注意的是,列表生成式并不總是最佳選擇。它們將整個輸出列表加載到內(nèi)存中。這對于中小型列表是可以接受的,甚至是可取的,因為它使操作更快。
然而,當(dāng)我們處理大型列表(例如10億個元素)時,應(yīng)該避免列表生成式。它可能會導(dǎo)致你的計算機崩潰,由于內(nèi)存需求量過大。
對于這樣大的列表,一個更好的選擇是使用一個生成器,它實際上不會在內(nèi)存中創(chuàng)建一個大的數(shù)據(jù)結(jié)構(gòu)。生成器在使用項時創(chuàng)建它們。用完后,生成器會將它們?nèi)拥簟I善鞑粫?dǎo)致內(nèi)存問題,但它們比列表生成式相對較慢。
謝謝你的閱讀。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【Python基础】Python列表生成式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11任务栏如何设置在顶部
- 下一篇: 【Python基础】入门Pandas不可