成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

深入了解Python enumerate和zip

瀏覽:159日期:2022-07-17 10:24:04

enumerate

首先介紹的是enumerate函數。

在我們日常編程的過程當中,經常會遇到一個問題。

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

for item in items:

通過迭代器的方式我們可以很輕松地遍歷數組,而不再需要下標,也不需要計算數組的長度了。但是如果我們在循環體當中需要知道元素的下標該怎么辦?

難道我們真的只能在下標和迭代器當中選擇一個嗎,比如在循環體的外面添加一個變量來記錄下標?

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

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

它的用法也很簡單,我們把需要迭代的對象或者迭代器傳入enumerate函數當中,它會為我們創建一個新的迭代器,同時返回下標以及迭代的內容。我們來看一個例子:

for i, item in enumerate(items):

除此之外,enumerate還支持傳入參數。比如在某些場景當中,我們希望下標從1開始,而不再是0開始,我們可以額外多傳入一個參數實現這點:

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

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

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

在不用enumerate的時候,我們有兩種迭代方式,這兩種都可以運行。

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

但是如果我們使用enumerate的話,由于引入了一個index,我們必須要做區分,否則會報錯,所以我們只有一種迭代方式:

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

zip

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

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

我們來看一個例子:

names = [’xiaoming’, ’xiaohua’, ’xiaohei’, ’xiaoli’]jobs = [’coach’, ’student’, ’student’, ’student’, ’professor’]for name, job in zip(names, jobs): print(name, job)

最后輸出的結果是人名和職業的tuple:

xiaoming coachxiaohua studentxiaohei studentxiaoli student

上面舉的例子當中,names和jobs的長度其實是不一致的,在使用了zip的情況下,會自動替我們按照其中較短的那個進行截斷。如果我們不希望截斷,我們也可以使用itertools下的zip_longest來代替zip:

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

這樣的話長度不夠的元素會以None來填充,zip_longest提供了一個參數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除了方便我們迭代遍歷之外,另一個很大的用處是可以很方便地生成dict。比如剛才的例子當中,我們想生成一個名稱和職業的dict,一般的辦法當然是先定義一個dict,然后遍歷所有的key和value,來生成dict。然而使用zip,我們可以將這個操作簡化到一行代碼:

jobDict = dict(zip(names, jobs))

需要注意的是,我們調用zip返回的結果其實是一個迭代器,我們在轉化成dict的時候自動遍歷了迭代器當中的內容。比如我們如果直接打印出zip調用結果的話,就會發現屏幕上輸出的是一個迭代器的地址:

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

我們想要獲得它的內容,需要將它手動轉成list:

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

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

以上就是深入了解Python enumerate和zip的詳細內容,更多關于Python enumerate和zip的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品剧情在线亚洲| 日本欧美在线观看| 亚洲丶国产丶欧美一区二区三区| 欧美成人一区二免费视频软件| 色偷偷一区二区三区| 一区二区三区不卡在线观看| 欧美日本久久| 国产亚洲污的网站| 99r国产精品| 精品人伦一区二区色婷婷| 国模少妇一区二区三区| 欧美日韩亚洲国产综合| 免费在线一区观看| 久久综合福利| 日韩电影免费一区| 色呦呦日韩精品| 日韩精品国产欧美| 久久亚洲精选| 亚洲成a人片在线观看中文| 一区二区高清| 亚洲免费视频中文字幕| 亚洲黄色一区| 亚洲精品视频免费看| 99视频精品免费观看| 亚洲一二三四区| 国产伦精品一区二区三| 亚洲成av人片一区二区| 色婷婷狠狠综合| 久久99精品久久久久久久久久久久| 在线看国产一区| 老司机精品视频一区二区三区| 欧美日高清视频| 国产69精品一区二区亚洲孕妇| 日韩精品一区二区在线| av色综合久久天堂av综合| 欧美激情一区二区三区四区| 亚洲亚洲精品三区日韩精品在线视频| 亚洲视频综合在线| 一区二区三区福利| 午夜精品福利在线| 欧美网站一区二区| 国产成人在线电影| 久久久99久久| 激情视频一区二区| 亚洲午夜精品一区二区三区他趣| 色综合久久天天综合网| 久久99深爱久久99精品| 日韩精品最新网址| 欧美日韩午夜| 亚洲制服丝袜av| 色综合久久99| 国产激情91久久精品导航| 精品欧美黑人一区二区三区| 午夜久久影院| 亚洲一区二区三区爽爽爽爽爽| 色婷婷综合视频在线观看| 国产乱子轮精品视频| 日韩精品一区二区三区四区视频| 欧美激情视频一区二区三区在线播放 | 伊人色综合久久天天| 国产农村妇女毛片精品久久莱园子 | 亚洲美女视频一区| 久久久久高清| 国产精品18久久久久久vr| 久久久www成人免费毛片麻豆| 亚洲毛片在线| 免费的成人av| 精品99久久久久久| 韩国在线视频一区| 日本欧美一区二区三区| 欧美成人乱码一区二区三区| 亚洲二区免费| 蜜臀久久99精品久久久久宅男 | 国产精品美女久久久久久久久久久| 久久国产精品久久精品国产| 国产精品小仙女| 欧美激情艳妇裸体舞| 六月丁香综合| 成人综合在线观看| 亚洲人成精品久久久久| 欧美色中文字幕| 欧美极品一区二区三区| 日韩av一区二区在线影视| 久久综合久久综合久久| 国产视频不卡| 国产最新精品免费| 综合久久一区二区三区| 欧美四级电影在线观看| 亚洲欧美文学| 秋霞av亚洲一区二区三| 国产无一区二区| 一本色道a无线码一区v| 99久久99久久精品国产片果冻| 亚洲精品菠萝久久久久久久| 在线成人午夜影院| 亚洲激情综合| 国产成a人无v码亚洲福利| 一区二区在线看| 日韩欧美国产一区二区三区| 香蕉久久夜色精品| av一区二区久久| 日本中文字幕一区| 国产欧美视频在线观看| 欧美在线色视频| 含羞草久久爱69一区| 国产精品99久久久久久久女警 | 午夜影院久久久| 久久丝袜美腿综合| 91黄视频在线| 午夜精品视频| 久久精品国产精品亚洲精品| 亚洲日本在线观看| 日韩欧美在线一区二区三区| 国产日韩欧美三区| 99久久er热在这里只有精品66| 午夜欧美在线一二页| 国产欧美一区二区三区在线看蜜臀| 欧洲精品一区二区| 国产精品二区影院| 国产一区二区主播在线| 亚洲自拍都市欧美小说| 国产欧美一区二区精品性| 欧美日韩国产另类不卡| 一本色道久久综合一区 | 欧美日韩精品久久| 国产一区在线视频| 国产精品国产三级国产aⅴ入口 | 欧美日韩国产bt| 一本久道久久综合婷婷鲸鱼| 99久久精品国产观看| 免费成人在线观看| 一区二区三区中文字幕精品精品| 久久久久久久久久久黄色| 欧美日韩五月天| 亚洲综合国产激情另类一区| 国内在线观看一区二区三区| 成人综合日日夜夜| 午夜精品爽啪视频| 中文字幕一区二区三区不卡| 欧美成人乱码一区二区三区| 精品视频一区二区三区免费| 国产区日韩欧美| 狠狠入ady亚洲精品| 99精品热视频| 国产成人精品免费网站| 久久爱另类一区二区小说| 亚洲成av人影院| 一区精品在线播放| 久久久蜜桃精品| 欧美一级片在线观看| 欧美性一区二区| 一本大道综合伊人精品热热| 伊人久久亚洲热| 午夜精品婷婷| 99r精品视频| 国产一区二区成人久久免费影院 | 国产成人8x视频一区二区| 精品亚洲国内自在自线福利| 日韩精品欧美精品| 亚洲一级二级在线| 一区二区三区中文字幕| 亚洲欧洲日产国码二区| 久久一夜天堂av一区二区三区| 91精品久久久久久久91蜜桃 | 亚洲国产精华液网站w| 久久九九久精品国产免费直播| 日韩欧美一区电影| 欧美日韩一区精品| 色香蕉成人二区免费| 99精品热视频只有精品10| 欧美视频不卡| 成人sese在线| 国产精品综合视频| 国产自产高清不卡| 国产一区二区在线看| 麻豆精品久久久| 日本大胆欧美人术艺术动态| 日韩国产精品91| 日韩制服丝袜先锋影音| 亚洲va欧美va人人爽| 亚洲午夜一区二区| 亚洲不卡av一区二区三区| 亚洲v日本v欧美v久久精品| 亚洲午夜三级在线| 午夜精品福利一区二区三区蜜桃| 日韩在线一区二区三区| 看国产成人h片视频| 激情综合网av| 国产福利91精品一区二区三区| 国产成人精品亚洲午夜麻豆| 风间由美性色一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 久久精品72免费观看| 黄一区二区三区| 国产精品资源站在线| 国产成都精品91一区二区三| av电影一区二区| 欧美视频二区| 国产日韩一区| 色中色一区二区|