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

深入了解Python enumerate和zip

 更新時(shí)間:2020年07月16日 14:55:38   作者:TechFlow2019  
這篇文章主要介紹了Python enumerate和zip的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

enumerate

首先介紹的是enumerate函數(shù)。

在我們?nèi)粘>幊痰倪^程當(dāng)中,經(jīng)常會遇到一個(gè)問題。

在C語言以及一些古老的語言當(dāng)中是沒有迭代器這個(gè)概念的,所以我們要遍歷數(shù)組或者是容器的時(shí)候,往往只能通過下標(biāo)。有了迭代器之后,我們遍歷的過程方便了很多,我們可以直接用一個(gè)變量去迭代一個(gè)容器當(dāng)中的值。最簡單的例子就是數(shù)組的遍歷,比如我們要遍歷items這個(gè)數(shù)組。我們可以直接:

for item in items:

通過迭代器的方式我們可以很輕松地遍歷數(shù)組,而不再需要下標(biāo),也不需要計(jì)算數(shù)組的長度了。但是如果我們在循環(huán)體當(dāng)中需要知道元素的下標(biāo)該怎么辦?

難道我們真的只能在下標(biāo)和迭代器當(dāng)中選擇一個(gè)嗎,比如在循環(huán)體的外面添加一個(gè)變量來記錄下標(biāo)?

idx = 0
for item in items:
  operation()
  idx += 1

這樣可以解決問題,但是很麻煩,一點(diǎn)也不簡潔,用專業(yè)的話來說一點(diǎn)也不pythonic(符合Python標(biāo)準(zhǔn)的代碼)。為了追求pythonic,于是有了enumerate函數(shù),來解決了我們又想直接迭代又需要知道元素下標(biāo)的情形。

它的用法也很簡單,我們把需要迭代的對象或者迭代器傳入enumerate函數(shù)當(dāng)中,它會為我們創(chuàng)建一個(gè)新的迭代器,同時(shí)返回下標(biāo)以及迭代的內(nèi)容。我們來看一個(gè)例子:

for i, item in enumerate(items):

除此之外,enumerate還支持傳入?yún)?shù)。比如在某些場景當(dāng)中,我們希望下標(biāo)從1開始,而不再是0開始,我們可以額外多傳入一個(gè)參數(shù)實(shí)現(xiàn)這點(diǎn):

for i, item in enumerate(items, 1):

循環(huán)是我們編程的時(shí)候必不可少的操作,也正因此,enumerate函數(shù)使用非常廣泛。但是有一點(diǎn)需要注意,如果我們迭代的是一個(gè)多元組數(shù)組,我們需要注意要將index和value區(qū)分開。舉個(gè)例子:

data = [(1, 3), (2, 1), (3, 3)]

在不用enumerate的時(shí)候,我們有兩種迭代方式,這兩種都可以運(yùn)行。

for x, y in data:

for (x, y) in data:

但是如果我們使用enumerate的話,由于引入了一個(gè)index,我們必須要做區(qū)分,否則會報(bào)錯(cuò),所以我們只有一種迭代方式:

for i, (x, y) in enumerate(data):

zip

接下來要介紹的另一個(gè)函數(shù)同樣是方便我們迭代的,不過它針對的是另一個(gè)場景——多對象迭代。

它的應(yīng)用場景非常簡單,就是我們想要同時(shí)迭代多份數(shù)據(jù),比如用戶的名字和用戶的職業(yè)數(shù)據(jù)是分開的,我們希望同時(shí)遍歷一個(gè)用戶的職業(yè)和名字。如果不使用zip,我們可能只能放棄迭代器回到傳統(tǒng)的下標(biāo)遍歷的模式了。這樣當(dāng)然是可以的,不過有兩個(gè)小問題,第一個(gè)小問題當(dāng)然是代碼的可讀性變差了,不夠pythonic,第二個(gè)問題是我們需要維護(hù)兩個(gè)容器長度不一樣的情況,會增加額外的代碼。而使用zip,可以同時(shí)解決以上兩個(gè)問題。

我們來看一個(gè)例子:

names = ['xiaoming', 'xiaohua', 'xiaohei', 'xiaoli']
jobs = ['coach', 'student', 'student', 'student', 'professor']

for name, job in zip(names, jobs):
 print(name, job)

最后輸出的結(jié)果是人名和職業(yè)的tuple:

xiaoming coach
xiaohua student
xiaohei student
xiaoli student

上面舉的例子當(dāng)中,names和jobs的長度其實(shí)是不一致的,在使用了zip的情況下,會自動替我們按照其中較短的那個(gè)進(jìn)行截?cái)?/span>。如果我們不希望截?cái)?,我們也可以使用itertools下的zip_longest來代替zip:

from itertools import zip_longest
for name, job in zip_longest(names, jobs):

這樣的話長度不夠的元素會以None來填充,zip_longest提供了一個(gè)參數(shù)fillvalue,可以填充成我們指定的值。

無論是zip還是zip_longest,都可以支持多迭代器的遍歷。比如:

names = ['xiaoming', 'xiaohua', 'xiaohei', 'xiaoli']
jobs = ['coach', 'student', 'student', 'student', 'professor']
hobbies = ['footbal', 'tennis', 'badminton', 'basketbal']

for name, job, hobby in zip(names, jobs, hobbies):
 print(name, job, hobby)

zip除了方便我們迭代遍歷之外,另一個(gè)很大的用處是可以很方便地生成dict。比如剛才的例子當(dāng)中,我們想生成一個(gè)名稱和職業(yè)的dict,一般的辦法當(dāng)然是先定義一個(gè)dict,然后遍歷所有的key和value,來生成dict。然而使用zip,我們可以將這個(gè)操作簡化到一行代碼:

jobDict = dict(zip(names, jobs))

需要注意的是,我們調(diào)用zip返回的結(jié)果其實(shí)是一個(gè)迭代器,我們在轉(zhuǎn)化成dict的時(shí)候自動遍歷了迭代器當(dāng)中的內(nèi)容。比如我們?nèi)绻苯哟蛴〕鰖ip調(diào)用結(jié)果的話,就會發(fā)現(xiàn)屏幕上輸出的是一個(gè)迭代器的地址:

print(zip(names, jobs))
>>> <zip object at 0x10ec93b40>

我們想要獲得它的內(nèi)容,需要將它手動轉(zhuǎn)成list:

print(list(zip(names, jobs)))
>>> [('xiaoming', 'coach'), ('xiaohua', 'student'), ('xiaohei', 'student'), ('xiaoli', 'student')]

無論是enumerate還是zip其實(shí)底層都是基于迭代器實(shí)現(xiàn)的,從原理上來說并沒有什么太深?yuàn)W的內(nèi)容,而且我們不使用它們也不影響我們寫代碼。但是Python之所以是Python,之所以很多人稱道它簡潔的語言和邏輯,離不開我們廣泛地使用這些簡化代碼邏輯的工具和方法。因此我們加以了解是非常有必要的,希望大家都能寫出pythonic的代碼,不僅寫代碼能力強(qiáng),而且代碼本身也漂亮。

以上就是深入了解Python enumerate和zip的詳細(xì)內(nèi)容,更多關(guān)于Python enumerate和zip的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    這篇文章主要為大家介紹了Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 如何將自己寫的模塊上傳到pypi

    如何將自己寫的模塊上傳到pypi

    這篇文章主要介紹了如何將自己寫的模塊上傳到pypi,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 基于Python+Flask設(shè)計(jì)實(shí)現(xiàn)AI智能天氣助手系統(tǒng)

    基于Python+Flask設(shè)計(jì)實(shí)現(xiàn)AI智能天氣助手系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何基于Python和Flask設(shè)計(jì)實(shí)現(xiàn)一個(gè)AI智能天氣助手系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-03-03
  • python直接調(diào)用和使用swig法方調(diào)用c++庫

    python直接調(diào)用和使用swig法方調(diào)用c++庫

    這篇文章主要介紹了python直接調(diào)用和使用swig法方調(diào)用c++庫,c++運(yùn)算速度快于python,python簡單易寫。很多時(shí)候?qū)τ谝延械腸++代碼也不想用python重寫,此時(shí)就自然而然地想到用python調(diào)用c或者c++,兩全其美,需要的朋友可以參考一下
    2022-03-03
  • Python基于Dlib的人臉識別系統(tǒng)的實(shí)現(xiàn)

    Python基于Dlib的人臉識別系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了Python基于Dlib的人臉識別系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python實(shí)現(xiàn)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲

    Python實(shí)現(xiàn)圖像隨機(jī)添加椒鹽噪聲和高斯噪聲

    圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。在噪聲的概念中,通常采用信噪比(Signal-Noise?Rate,?SNR)衡量圖像噪聲。本文將利用Python實(shí)現(xiàn)對圖像隨機(jī)添加椒鹽噪聲和高斯噪聲,感興趣的可以了解一下
    2022-09-09
  • 使用python批量化音樂文件格式轉(zhuǎn)換的實(shí)例

    使用python批量化音樂文件格式轉(zhuǎn)換的實(shí)例

    今天小編就為大家分享一篇使用python批量化音樂文件格式轉(zhuǎn)換的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python?Concurrent?Futures解鎖并行化編程的魔法示例

    Python?Concurrent?Futures解鎖并行化編程的魔法示例

    Python的concurrent.futures模塊為并行化編程提供了強(qiáng)大的工具,使得開發(fā)者能夠輕松地利用多核心和異步執(zhí)行的能力,本文將深入探討concurrent.futures的各個(gè)方面,從基礎(chǔ)概念到高級用法,為讀者提供全面的了解和實(shí)用的示例代碼
    2023-12-12
  • Python os模塊學(xué)習(xí)筆記

    Python os模塊學(xué)習(xí)筆記

    這篇文章主要介紹了Python os模塊學(xué)習(xí)筆記,本文總結(jié)了OS模塊的常用方法、實(shí)用方法,并給出了兩個(gè)使用實(shí)例,需要的朋友可以參考下
    2015-06-06
  • python 中的命名空間,你真的了解嗎?

    python 中的命名空間,你真的了解嗎?

    這篇文章主要介紹了python 中命名空間的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評論

尉犁县| 海兴县| 新和县| 沿河| 咸宁市| 宣威市| 河东区| 德惠市| 清丰县| 东阳市| 武穴市| 安溪县| 林口县| 海口市| 宣威市| 三门峡市| 高邮市| 涿州市| 手游| 云南省| 会昌县| 高邮市| 三亚市| 定州市| 和静县| 宁化县| 渝北区| 淅川县| 乐安县| 阆中市| 南澳县| 玛多县| 江油市| 泰宁县| 洛浦县| 天全县| 台东市| 赤壁市| 浪卡子县| 望城县| 二手房|