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

我們?yōu)槭裁匆獪p少Python中循環(huán)的使用

 更新時(shí)間:2019年07月10日 09:28:14   作者:QiuyueZhong  
這篇文章主要介紹了我們?yōu)槭裁匆獪p少Python中循環(huán)的使用,我將闡述 Python 提供的一些簡(jiǎn)單但是非常有用的結(jié)構(gòu),一些小技巧以及一些我在數(shù)據(jù)科學(xué)工作中遇到的案例。我將討論 Python 中的 for 循環(huán),以及如何盡量避免使用它們,需要的朋友可以參考下

前言

Python 提供給我們多種編碼方式。

在某種程度上,這相當(dāng)具有包容性。

來(lái)自于任何語(yǔ)言的人都可以編寫(xiě) Python。

然而,學(xué)習(xí)寫(xiě)一門(mén)語(yǔ)言和以最優(yōu)的方式寫(xiě)一門(mén)語(yǔ)言是兩件不同的事情。

在這一系列名為 Python Shorts 的文章中,我將闡述 Python 提供的一些簡(jiǎn)單但是非常有用的結(jié)構(gòu),一些小技巧以及一些我在數(shù)據(jù)科學(xué)工作中遇到的案例。

在這篇文章中,我將討論 Python 中的 for 循環(huán),以及如何盡量避免使用它們。

寫(xiě) for 循環(huán)的 3 種方式:

讓我用一個(gè)簡(jiǎn)單的例子來(lái)解釋下。

假設(shè)你想取得一個(gè)列表中的平方和。

在機(jī)器學(xué)習(xí)中,當(dāng)我們想計(jì)算 n 維情況下兩點(diǎn)之間的距離時(shí),我們都會(huì)面臨這個(gè)問(wèn)題。

你可以使用循環(huán)很容易的做到這一點(diǎn)。

事實(shí)上,我想展示給你我看到的用來(lái)完成同樣任務(wù)的三種方式,并讓你選擇你認(rèn)為最好的方式。

x = [1,3,5,7,9]
sum_squared = 0

for i in range(len(x)):
  sum_squared+=x[i]**2

當(dāng)我在 Python 代碼中看到以上代碼的時(shí)候,我知道這個(gè)人是擁有 C 或者 Java 背景的。

完成同樣的事情,更 Pythonic 的方式是:

x = [1,3,5,7,9]
sum_squared = 0

for y in x:
  sum_squared+=y**2

這樣更好了。

我沒(méi)有索引這個(gè)列表。并且我的代碼更具有可讀性。

但是,更 Pythonic 的方式一行就可以完成。

x = [1,3,5,7,9]
sum_squared = sum([y**2 for y in x])

這種方法稱(chēng)為 List Comprehension,這很可能是我愛(ài)上 Python 的原因之一。

你也可以在 List Comprehension 中使用 if。

假設(shè)我們只想要偶數(shù)的平方數(shù)列表。

x = [1,2,3,4,5,6,7,8,9]
even_squared = [y**2 for y in x if y%2==0]
# 輸出結(jié)果:
[4,16,36,64]

if-else?

如果我們同時(shí)想要偶數(shù)的平方數(shù)和奇數(shù)的立方數(shù)呢?

x = [1,2,3,4,5,6,7,8,9]
squared_cubed = [y**2 if y%2==0 else y**3 for y in x]
# 輸出結(jié)果:
[1, 4, 27, 16, 125, 36, 343, 64, 729]

太棒了!

因此,大體上遵循這個(gè)具體的準(zhǔn)則:每當(dāng)你想寫(xiě)一個(gè) for 語(yǔ)句的時(shí)候,你應(yīng)該問(wèn)自己以下的問(wèn)題,

  • 可以不用 for 做到嗎?更 Pythonic 的風(fēng)格。
  • 可以用 List Comprehension 做到嗎?如果是,使用它。
  • 可以不索引數(shù)組嗎?如果不是,考慮使用 enumerate。

什么是 enumerate?

有時(shí)我們既需要數(shù)組中的索引,也需要數(shù)組中的值。

在這種情況下,我更喜歡使用 enumerate 而不是索引列表。

L = ['blue', 'yellow', 'orange']
for i, val in enumerate(L):
  print("index is %d and value is %s" % (i, val))
# 輸出結(jié)果:
index is 0 and value is blue
index is 1 and value is yellow
index is 2 and value is orange

有個(gè)規(guī)則是:

絕不索引一個(gè)列表,如果你能不使用它。

嘗試使用 Dictionary Comprehension

也可以嘗試使用 Dictionary Comprehension,它是 Python 中相對(duì)較新的補(bǔ)充,語(yǔ)法和 List Comprehension 很相似。

讓我用一個(gè)例子來(lái)解釋。我想為 x 中的每個(gè)值獲取一個(gè) dictionary(key:平方值)。

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x}
# 輸出結(jié)果:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

如果只想得到偶數(shù)值的 dictionary 怎么辦?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 for k in x if x%2==0}
# 輸出結(jié)果:
{2: 4, 4: 16, 6: 36, 8: 64}

如果想同時(shí)得到偶數(shù)值的平方和奇數(shù)值的立方怎么辦?

x = [1,2,3,4,5,6,7,8,9]
{k:k**2 if k%2==0 else k**3 for k in x}
# 輸出結(jié)果:
{1: 1, 2: 4, 3: 27, 4: 16, 5: 125, 6: 36, 7: 343, 8: 64, 9: 729}

結(jié)論

最后,我要說(shuō)的是,雖然看上去很容易將從其他語(yǔ)言獲得的知識(shí)移用到 Python 上,但如果繼續(xù)這樣做,你將無(wú)法理解到 Python 的優(yōu)美。當(dāng)我們用 Python 的方式使用它,它的功能要強(qiáng)大得多,也要有趣得多。

所以,當(dāng)需要 for 循環(huán)的時(shí)候,使用 List Comprehensions 和 Dictionary Comprehensions。當(dāng)需要數(shù)組索引的時(shí)候,使用 enumerate。

避免像傳染病一樣的循環(huán)

從長(zhǎng)遠(yuǎn)來(lái)看,你的代碼將更具可讀性和可維護(hù)性。

英文原文地址:Minimize for loop usage in Python

原文作者:Rahul Agarwal

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pandas數(shù)據(jù)的合并與拼接的實(shí)現(xiàn)

    pandas數(shù)據(jù)的合并與拼接的實(shí)現(xiàn)

    Pandas包的merge、join、concat方法可以完成數(shù)據(jù)的合并和拼接,本文主要介紹了這三種實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳細(xì)介紹Python進(jìn)度條tqdm的使用

    詳細(xì)介紹Python進(jìn)度條tqdm的使用

    這篇文章主要介紹了詳細(xì)介紹Python進(jìn)度條tqdm的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

    Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

    這篇文章主要介紹了Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • python同時(shí)替換多個(gè)字符串方法示例

    python同時(shí)替換多個(gè)字符串方法示例

    這篇文章主要介紹了python同時(shí)替換多個(gè)字符串方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用python實(shí)現(xiàn)遞歸版漢諾塔示例(漢諾塔遞歸算法)

    使用python實(shí)現(xiàn)遞歸版漢諾塔示例(漢諾塔遞歸算法)

    這篇文章主要介紹了使用python實(shí)現(xiàn)遞歸版漢諾塔示例(漢諾塔遞歸算法),需要的朋友可以參考下
    2014-04-04
  • 教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲

    教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲

    這篇文章主要介紹了教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python3音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)代碼

    python3音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了python3音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解基于python的全局與局部序列比對(duì)的實(shí)現(xiàn)(DNA)

    詳解基于python的全局與局部序列比對(duì)的實(shí)現(xiàn)(DNA)

    這篇文章主要介紹了詳解基于python的全局與局部序列比對(duì)的實(shí)現(xiàn)(DNA).文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Pycharm編輯器技巧之自動(dòng)導(dǎo)入模塊詳解

    Pycharm編輯器技巧之自動(dòng)導(dǎo)入模塊詳解

    我們?cè)诰幊踢^(guò)程中經(jīng)常會(huì)不經(jīng)意的使用到一些尚未導(dǎo)入的類(lèi)和模塊,在這種情況下Pycharm會(huì)幫助我們定位模塊文件位置并將其添加到導(dǎo)入列表中,這也就是所謂的自動(dòng)導(dǎo)入模塊功能。本文給大家介紹了關(guān)于Pycharm編輯器技巧之自動(dòng)導(dǎo)入模塊的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • Python實(shí)現(xiàn)Appium錄屏功能示例代碼

    Python實(shí)現(xiàn)Appium錄屏功能示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)Appium錄屏功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

太仆寺旗| 黄骅市| 华安县| 平陆县| 台中市| 来凤县| 威远县| 合山市| 泾源县| 伊春市| 绿春县| 永年县| 东丽区| 边坝县| 县级市| 尤溪县| 山阴县| 河津市| 贵溪市| 沧州市| 鸡西市| 比如县| 晴隆县| 松江区| 嘉义县| 南雄市| 大兴区| 灵宝市| 平邑县| 淮南市| 南平市| 嘉义县| 耒阳市| 应城市| 沙田区| 曲靖市| 工布江达县| 郯城县| 织金县| 从化市| 莱州市|