久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Python 的列表解析式是解決任務(wù)最有效的方法嗎?

Python 是一種極其多樣化和強(qiáng)大的編程語(yǔ)言!當(dāng)需要解決一個(gè)問題時(shí),它有著不同的方法。在本文中,我將向您展示列表解析式(List Comprehension)。我們將討論如何使用它?什么時(shí)候該或不該使用它?小伙伴們,把全文都讀下來(lái)把!

列表解析式的優(yōu)勢(shì)

  • 比循環(huán)更節(jié)省時(shí)間和空間。
  • 需要更少的代碼行。
  • 可將迭代語(yǔ)句轉(zhuǎn)換為公式。

如何在 Python 中創(chuàng)建列表

列表解析式是一種基于現(xiàn)有列表創(chuàng)建列表的語(yǔ)法結(jié)構(gòu)。讓我們來(lái)看看創(chuàng)建列表的不同實(shí)現(xiàn)

循環(huán)

循環(huán)是創(chuàng)建列表的傳統(tǒng)方式。不管你使用什么樣的循環(huán)。要以這種方式創(chuàng)建列表,您應(yīng)該:

  1. 實(shí)例化一個(gè)空列表。
  2. 循環(huán)遍歷一個(gè)可迭代的(如?range)的元素。
  3. 將每個(gè)元素附加到列表的末尾。

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    在此示例中,您實(shí)例化了一個(gè)空列表?numbers。然后使用?for?循環(huán)迭代?range(10)?并使用?append()?方法將每個(gè)數(shù)字附加到列表的末尾。

    map() 對(duì)象

    map()?是創(chuàng)建列表的另一種方法。您需要向?map()?傳遞一個(gè)函數(shù)和一個(gè)可迭代對(duì)象,之后它會(huì)創(chuàng)建一個(gè)對(duì)象。該對(duì)象包含使用指定函數(shù)執(zhí)行每個(gè)迭代元素所獲得的輸出。

    例如,我們將呈現(xiàn)在某些產(chǎn)品的價(jià)格中增加增值稅的任務(wù)。

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    您已經(jīng)構(gòu)建了?add_vat()?函數(shù)并創(chuàng)建了?prices?可迭代對(duì)象。您將這兩個(gè)參數(shù)都傳遞給?map()?并收集生成的?map?對(duì)象?grand_prices,或者您可以使用?list()?輕松地將其轉(zhuǎn)換為列表。

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    列表解析式

    現(xiàn)在,讓我們看一下列表解析式方法!這確實(shí)是 Python 風(fēng)格,并且是創(chuàng)建列表的更好方法。為了弄清楚這種方法有多強(qiáng)大,我們用一個(gè)單行代碼來(lái)重寫那個(gè)循環(huán)示例。

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    正如您所見,這是一種不可思議的方法!列表解析式看起來(lái)足夠可讀,您不需要編寫更多代碼,而只需一行。

    為了更好地理解列表,請(qǐng)查看以下語(yǔ)法格式:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    哪種方法更有效

    好的,我們已經(jīng)學(xué)習(xí)了如何使用循環(huán)、map()?和列表解析式來(lái)創(chuàng)建列表,在您的腦海中可能會(huì)提出“哪種方法更有效”的問題。我們來(lái)分析一下吧!

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    正如我們現(xiàn)在所看到的,創(chuàng)建列表的最優(yōu)的方法是?map(),排在第二位的是列表解析式,最后是循環(huán)

    但是,方法的選擇應(yīng)取決于您想要實(shí)現(xiàn)的目標(biāo)。

    • 使用?map()?可以使你的代碼更高效。
    • 使用循環(huán)可以使代碼的思路展現(xiàn)更加清晰。
    • 使用列表解析式可以您使代碼更加緊湊,且較高效。這是創(chuàng)建列表的最佳方式,因?yàn)檫@種方式可讀性最強(qiáng)。

    高級(jí)解析式

    條件邏輯

    早些時(shí)候,我向您展示了這個(gè)公式:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    公式可能有些不完整。對(duì)解析式的更加完整描述增加了對(duì)可選條件的支持。將條件邏輯添加到列表解析式的最常見方法是在表達(dá)式的末尾添加條件:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    在這里,您的條件語(yǔ)句正好位于右邊的括號(hào)中。

    條件很重要,因?yàn)樗鼈冊(cè)试S列表解析式過濾掉不需要的值,這在一般情況下也可以調(diào)用?filter()

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    正如您所看到的那樣,這個(gè)解析式收集了可被 2 整除且沒有余數(shù)的數(shù)字。

    如果您需要更復(fù)雜的過濾器,那么您甚至可以將條件邏輯移動(dòng)到單獨(dú)的函數(shù)中。

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    您構(gòu)建?is_prime(number)?以確定是否是素?cái)?shù)并返回布爾值。接下來(lái),您應(yīng)該將函數(shù)添加到解析式的條件中。

    該公式允許您使用條件邏輯從幾個(gè)可能的輸出選項(xiàng)中進(jìn)行選擇。例如,您有一個(gè)產(chǎn)品價(jià)格表,若有負(fù)數(shù),您應(yīng)將其轉(zhuǎn)換為正數(shù):

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    在這里,您的表達(dá)式?price?有一個(gè)條件語(yǔ)句,如果?price > 0 else price*-1。這會(huì)告訴 Python,如果價(jià)格為正,則輸出價(jià)格值;但如果價(jià)格為負(fù),則將價(jià)格轉(zhuǎn)換為正值。該功能很強(qiáng)大,考慮將條件邏輯視為其自身的函數(shù)的確是很有用的:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    集合解析式

    您還可以創(chuàng)建一個(gè)集合解析式!它基本與列表解析式相同。不同之處在于集合解析式不包含重復(fù)項(xiàng)。您可以通過使用花括號(hào)取代方括號(hào)來(lái)創(chuàng)建集合解析式:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    你的集合解析式只包含唯一的字母。這與列表不同,集合不保證項(xiàng)目將以特定順序存儲(chǔ)數(shù)據(jù)。這就是為什么集合輸出的第二個(gè)字母是?e,即使字符串中的第二個(gè)字母是?x

    字典解析式

    字典解析式也是是類似的,但需要定義一個(gè)

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    要?jiǎng)?chuàng)建?word_order?字典,請(qǐng)?jiān)诒磉_(dá)式中使用花括號(hào) ({}) 以及鍵值對(duì) (el: ind+1)。

    海象運(yùn)算符

    Python 3.8 中引入的海象運(yùn)算符允許您一次解決兩個(gè)問題:為變量賦值,返回該值。

    假設(shè)您需要對(duì)將返回溫度數(shù)據(jù)的 API 應(yīng)用十次。您想要的只是 100 華氏度以上的結(jié)果。而每個(gè)請(qǐng)求可能都會(huì)返回不同的數(shù)據(jù)。在這種情況下,沒有辦法在 Python 中使用列表解析式來(lái)解決問題。可迭代成員(如果有條件)的公式表達(dá)式無(wú)法讓條件將數(shù)據(jù)分配給表達(dá)式可以訪問的變量。

    海象運(yùn)算符解決了這個(gè)問題。它允許您在執(zhí)行表達(dá)式的同時(shí)將輸出值分配給變量。以下示例顯示了這是如何實(shí)現(xiàn)的,使用?get_weather_data()?生成偽天氣數(shù)據(jù):

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    什么時(shí)候不要使用解析式

    列表解析式非常有用,它可以幫助您編寫清晰且易于閱讀和調(diào)試的代碼。但在某些情況下,它們可能會(huì)使您的代碼運(yùn)行速度變慢或使用更多內(nèi)存。如果它讓您的代碼效率更低或更難理解,那么可以考慮選擇另一種方式。

    注意嵌套的解析式

    可以通過嵌套解析式以創(chuàng)建列表、字典和集合的組合集合譯者注:這個(gè)集合不是指 set 對(duì)象類型,而是 collection,泛指容器)。例如,假設(shè)一家公司正在跟蹤一年中五個(gè)不同城市的收入。存儲(chǔ)這些數(shù)據(jù)的完美數(shù)據(jù)結(jié)構(gòu)可以是嵌套在字典解析式中的列表解析式

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    您使用字典解析式創(chuàng)建了?budgets?容器。該表達(dá)式是一個(gè)鍵值對(duì),其中包含另一個(gè)解析式。此代碼將快速生成城市中每個(gè)?city?的數(shù)據(jù)列表。

    嵌套列表是創(chuàng)建矩陣的常用方法,通常用于數(shù)學(xué)目的。查看下面的代碼塊:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    外部列表解析式?[... for y in range(6)]?創(chuàng)建了六行,而內(nèi)部列表解析式?[x for x in range(7)]?將用值填充這些行中的每一行。

    到目前為止,每個(gè)嵌套解析式的目標(biāo)都是真正且直觀的。但是,還有一些其他情況,例如創(chuàng)建扁平化的嵌套列表,其中的邏輯可以使您的代碼非常難以閱讀。讓我們看下面的例子,使用嵌套列表解析式來(lái)展平一個(gè)矩陣:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    扁平化矩陣的代碼確實(shí)很簡(jiǎn)潔,但是太難理解了,您應(yīng)該花點(diǎn)時(shí)間弄清楚它是如何工作的。另一方面,如果您使用?for?循環(huán)來(lái)展平相同的矩陣,那么您的代碼將更加簡(jiǎn)單易讀:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    現(xiàn)在,您可以看到代碼一次遍歷矩陣的一行,在移動(dòng)到下一行之前取出該行中的所有元素。

    雖然嵌套列表解析式可能看起來(lái)更具有 Python 風(fēng)格,但對(duì)于能夠編寫出您的團(tuán)隊(duì)可以輕松理解和修改的代碼來(lái)才是更加最重要的。當(dāng)選擇一個(gè)方法時(shí),您應(yīng)該根據(jù)解析式是有助于還是有損于可讀性來(lái)做出相應(yīng)的判斷。

    為大型數(shù)據(jù)集使用生成器

    Python 中的列表解析式通過將整個(gè)列表存儲(chǔ)到內(nèi)存中來(lái)工作。對(duì)于小型至中型列表這通常很好。如果您想將前一千個(gè)整數(shù)相加,那么列表解析式將輕松地解決此任務(wù):

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:499500

    但是,如果您需要對(duì)十億個(gè)數(shù)字求和呢?您可以嘗試執(zhí)行此操作,但您的計(jì)算機(jī)可能不會(huì)有響應(yīng)。這是可能因?yàn)橛?jì)算機(jī)中分配大量?jī)?nèi)存。也許您是因?yàn)橛?jì)算機(jī)沒有如此多的內(nèi)存資源。

    例如,你想要一些第一個(gè)十億整數(shù),那么讓我們使用生成器!這可能多需要一些時(shí)間,但計(jì)算機(jī)應(yīng)該可以克服它:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    讓我們來(lái)對(duì)比一下哪種方法是更優(yōu)的!

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    輸出:

    Python 的列表解析式是解決任務(wù)最有效的方法嗎?

    正如您所見,生成器比?map()?高效得多。

    總結(jié)

    本文向您介紹了列表解析式,以及如何使用它來(lái)解決復(fù)雜的任務(wù),而不會(huì)使您的代碼變得過于困難。

    現(xiàn)在你:

    • 學(xué)習(xí)了幾種創(chuàng)建列表的替代方法。
    • 找出每種方法的優(yōu)點(diǎn)。
    • 可以簡(jiǎn)化循環(huán)和 map() 調(diào)用列表解析式。
    • 理解了一種將條件邏輯添加到解析式中的方法。
    • 可以創(chuàng)建集合和字典解析式。
    • 學(xué)會(huì)了何時(shí)不使用解析式。

    感謝您閱讀本文直到結(jié)束!如果這篇文章有幫助,請(qǐng)發(fā)表評(píng)論,記得點(diǎn)擊“關(guān)注”確保你不會(huì)錯(cuò)過我的文章!你的活動(dòng)是我的快樂!祝你好運(yùn)!

    鏈接:https://blog.devgenius.io/is-list-comprehension-the-most-effective-way-to-solve-any-tasks-python-b6bb3f5391fa#:~:text=compact%20yet%20optimized.-,Advance%20Level%20of%20a%20Comprehension,-Conditionals%20Logic

    (版權(quán)歸原作者所有,侵刪)

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 麻阳| 长宁区| 阿勒泰市| 固镇县| 乐亭县| 上杭县| 永福县| 苍南县| 车险| 雷州市| 曲阳县| 荃湾区| 洛川县| 霞浦县| 定日县| 东安县| 正定县| 东安县| 恭城| 盐山县| 西乌珠穆沁旗| 孝义市| 胶州市| 桐庐县| 逊克县| 陈巴尔虎旗| 江西省| 黑山县| 宝鸡市| 望城县| 牙克石市| 饶河县| 渝北区| 睢宁县| 南江县| 柞水县| 综艺| 海晏县| 读书| 皮山县| 托克逊县|