Python中列表遍歷使用range和enumerate的區(qū)別講解
前言
兩者的比較只是編程實(shí)現(xiàn)上的差異,請(qǐng)不要絕對(duì)化、教條化。這里只從技術(shù)方面討論。這種區(qū)別非常細(xì),局限于特定場(chǎng)合。
在Python編程語(yǔ)言中,遍歷list有range和enumerate方法,示例:
num_list = [8, 2, 4, 5, 0, -1,7] for i in range(len(num_list)): print(f'i: {i} num_list[i]: {num_list[i]}') print('-------------------') for i, num in enumerate(num_list): print(f'i: {i} num: {num}')
輸出結(jié)果:
i: 0 num_list[i]: 8
i: 1 num_list[i]: 2
i: 2 num_list[i]: 4
i: 3 num_list[i]: 5
i: 4 num_list[i]: 0
i: 5 num_list[i]: -1
i: 6 num_list[i]: 7
-------------------
i: 0 num: 8
i: 1 num: 2
i: 2 num: 4
i: 3 num: 5
i: 4 num: 0
i: 5 num: -1
i: 6 num: 7
分析 range函數(shù)
Python內(nèi)置的range函數(shù)返回的是一個(gè)整數(shù)序列,一般用于循環(huán)結(jié)構(gòu)中
range語(yǔ)法:range(start, end, step)
- start:計(jì)數(shù)開(kāi)始位置
- end:計(jì)數(shù)結(jié)束位置
- step:步長(zhǎng)(默認(rèn)是1,非必填參數(shù))
range一般適用于迭代一系列整數(shù)
range是通過(guò)遍歷索引取訪問(wèn)list的元素的。
enumerate函數(shù)
Python有一個(gè)內(nèi)置的enumerate函數(shù),它可以解決剛才的問(wèn)題,可以更簡(jiǎn)單。enumerate能夠把任何一種迭代器
封裝成惰性生成器
,這樣的話,每次循環(huán)的時(shí)候,它只需要從迭代器里面獲取下一個(gè)值就行了,同時(shí),它還會(huì)給出本輪循環(huán)的序號(hào),即生成器每次產(chǎn)生一對(duì)輸出值
enumerate語(yǔ)法:enumerate(sequence, start)
- sequence:一個(gè)序列、迭代器或其他支持迭代對(duì)象
- start:起始位置(默認(rèn)是0,非必填參數(shù))
對(duì)比,永遠(yuǎn)是限定環(huán)境。不區(qū)分前提的對(duì)比毫無(wú)意義。
點(diǎn)擊這里,可以看到有人用千萬(wàn)級(jí)別list測(cè)試的秒級(jí)別的差異。從該對(duì)比可以看出,對(duì)于數(shù)據(jù)量少、執(zhí)行時(shí)間不敏感的場(chǎng)合,二者差異可以忽略不計(jì);對(duì)于數(shù)據(jù)量過(guò)度使用場(chǎng)合,二者有明顯差異。但這個(gè)差異是否被接受,看大家自己的意愿。
總的來(lái)說(shuō):
range通過(guò)索引遍歷元素,屬于間接訪問(wèn)。enumerate直接遍歷元素,效率稍高,代碼簡(jiǎn)潔。range輸出的是元素的索引。enumerate輸出的是元素的索引和元素。 結(jié)論:
建議使用enumerate代替range。注意不是強(qiáng)制,每個(gè)人有自己的習(xí)慣。
核心要點(diǎn):
(1)enumerate函數(shù)提供了一種精簡(jiǎn)的寫(xiě)法,可以在遍歷迭代器時(shí)獲知每個(gè)元素的索引。
(2)盡量用enumerate來(lái)改寫(xiě)那種將range與下標(biāo)訪問(wèn)相結(jié)合的序列遍歷代碼。
(3)可以給enumerate提供第二參數(shù),以指定開(kāi)始計(jì)數(shù)時(shí)所用的值(默認(rèn)為0)
(4)在只需要value的情況下,直接使用in list的效率更高
到此這篇關(guān)于Python中列表遍歷使用range和enumerate的區(qū)別的文章就介紹到這了,更多相關(guān)Python中列表遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)讀取文件夾按數(shù)字排序功能
這篇文章主要介紹了Python讀取文件夾按數(shù)字排序,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09解決python3中自定義wsgi函數(shù),make_server函數(shù)報(bào)錯(cuò)的問(wèn)題
下面小編就為大家分享一篇解決python3中自定義wsgi函數(shù),make_server函數(shù)報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11python ctypes庫(kù)2_指定參數(shù)類型和返回類型詳解
今天小編就為大家分享一篇python ctypes庫(kù)2_指定參數(shù)類型和返回類型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python中Timedelta轉(zhuǎn)換為Int或Float方式
這篇文章主要介紹了Python中Timedelta轉(zhuǎn)換為Int或Float方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟
這篇文章主要介紹了Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python中match語(yǔ)句的詳細(xì)用法實(shí)例
match語(yǔ)句接受一個(gè)表達(dá)式并將其值與作為一個(gè)或多個(gè)?case?塊給出的連續(xù)模式進(jìn)行比較,下面這篇文章主要給大家介紹了關(guān)于Python中match語(yǔ)句的詳細(xì)用法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11