亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入了解Python enumerate和zip

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

enumerate

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

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

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

for item in items:

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

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

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

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

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

for i, item in enumerate(items):

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

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

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

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

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

for x, y in data:

for (x, y) in data:

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

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

zip

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

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

我們來看一個例子:

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

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

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

xiaoming coach
xiaohua student
xiaohei student
xiaoli student

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

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

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

jobDict = dict(zip(names, jobs))

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

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

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

相關文章

  • Python使用pandas實現(xiàn)對數(shù)據(jù)進行特定排序

    Python使用pandas實現(xiàn)對數(shù)據(jù)進行特定排序

    在數(shù)據(jù)分析和處理過程中,排序是一項常見而重要的操作,本文將詳細介紹如何利用pandas對數(shù)據(jù)進行特定排序,包括基本排序、多列排序、自定義排序規(guī)則等方面的內(nèi)容,需要的可以了解下
    2024-03-03
  • python運行cmd命令10種方式并獲得返回值的高級技巧

    python運行cmd命令10種方式并獲得返回值的高級技巧

    這篇文章主要給大家介紹了關于python運行cmd命令10種方式并獲得返回值的高級技巧,主要包括python腳本執(zhí)行CMD命令并返回結果的例子使用實例、應用技巧,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Python實現(xiàn)隨機選擇元素功能

    Python實現(xiàn)隨機選擇元素功能

    這篇文章主要為大家詳細介紹了Python實現(xiàn)隨機選擇元素功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • django中celery的定時任務使用

    django中celery的定時任務使用

    這篇文章主要介紹了django中celery的定時任務使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 解決Django Haystack全文檢索為空的問題

    解決Django Haystack全文檢索為空的問題

    這篇文章主要介紹了解決Django Haystack全文檢索為空的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 手把手教你pip配置國內(nèi)鏡像源(最新詳盡版)

    手把手教你pip配置國內(nèi)鏡像源(最新詳盡版)

    pip是一個現(xiàn)代的,通用的Python包管理工具,提供了對Python包的查找、下載、安裝、卸載的功能,下面這篇文章主要給大家介紹了關于pip配置國內(nèi)鏡像源的相關資料,需要的朋友可以參考下
    2023-02-02
  • numpy使用fromstring創(chuàng)建矩陣的實例

    numpy使用fromstring創(chuàng)建矩陣的實例

    今天小編就為大家分享一篇numpy使用fromstring創(chuàng)建矩陣的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python 引用傳遞和值傳遞詳解(實參,形參)

    python 引用傳遞和值傳遞詳解(實參,形參)

    這篇文章主要介紹了python 引用傳遞和值傳遞詳解(實參,形參)。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python中print函數(shù)語法格式以及各參數(shù)舉例詳解

    Python中print函數(shù)語法格式以及各參數(shù)舉例詳解

    這篇文章主要給大家介紹了關于Python中print函數(shù)語法格式以及各參數(shù)舉例詳解的相關資料,print()函數(shù)用于將指定的字符串或?qū)ο?通常是字符串)輸出到屏幕或文件中,需要的朋友可以參考下
    2023-10-10
  • Python--模塊(Module)和包(Package)詳解

    Python--模塊(Module)和包(Package)詳解

    這篇文章主要介紹了Python中模塊(Module)和包(Package)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09

最新評論