Python中enumerate函數(shù)詳解之遍歷中的索引神器
對(duì)話實(shí)錄
小白:(苦惱)我在遍歷列表時(shí),想知道每個(gè)元素的位置,只能用個(gè)計(jì)數(shù)器變量,好繁瑣,有沒(méi)有更簡(jiǎn)單的辦法?
專家:(掏出法寶)用enumerate函數(shù),遍歷同時(shí)獲取索引,輕松解決你的困擾!
enumerate函數(shù)基礎(chǔ)直擊
1. 基本用法
enumerate函數(shù)用于將一個(gè)可迭代對(duì)象(如列表、字符串、元組等)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)。
源代碼中大家可以看到enumerate類定義了__iter__ 和__next__魔法方法,之前文章我們也說(shuō)過(guò)定義了這兩種方法的可以作為迭代器使用。
函數(shù)可以接收2個(gè)參數(shù)
1)iterable(必填):可迭代對(duì)象,如列表、元組、字符串等。
2)start(可選):默認(rèn)為0。不為0 意思是指定索引的起始值,比如start=1代表索引從1開始而不是從0開始。
fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(f"索引 {index} 對(duì)應(yīng)的水果是 {fruit}") # 輸出: # 索引 0 對(duì)應(yīng)的水果是 apple # 索引 1 對(duì)應(yīng)的水果是 banana # 索引 2 對(duì)應(yīng)的水果是 cherry
這里enumerate函數(shù)就像給每個(gè)水果貼上了對(duì)應(yīng)的位置標(biāo)簽,讓我們?cè)诒闅v水果列表時(shí),輕松知道它們的位置。
2. 起始索引設(shè)定
enumerate函數(shù)還可以指定起始索引,默認(rèn)從 0 開始,若需要從其他數(shù)字開始計(jì)數(shù),可傳入第二個(gè)參數(shù)。
students = ['Alice', 'Bob', 'Charlie'] for rank, student in enumerate(students, start = 1): print(f"排名第 {rank} 的學(xué)生是 {student}") # 輸出: # 排名第 1 的學(xué)生是 Alice # 排名第 2 的學(xué)生是 Bob # 排名第 3 的學(xué)生是 Charlie
在這種場(chǎng)景下,將起始索引設(shè)為 1,更符合日常排名的習(xí)慣。
常用功能及案例
案例 1:修改特定位置元素
在處理列表時(shí),有時(shí)需要根據(jù)索引修改特定位置的元素,enumerate函數(shù)能精準(zhǔn)定位。
scores = [85, 90, 78, 95] for index, score in enumerate(scores): if index == 2: scores[index] = 80 # 將索引為2的成績(jī)修改為80 print(scores) # 輸出:[85, 90, 80, 95]
案例 2:查找特定元素位置
利用enumerate函數(shù)可以快速找到列表中某個(gè)元素的所有位置。
colors = ['red', 'blue', 'green', 'blue', 'yellow'] blue_positions = [index for index, color in enumerate(colors) if color == 'blue'] print(blue_positions) # 輸出:[1, 3]
這里通過(guò)列表推導(dǎo)式結(jié)合enumerate函數(shù),高效篩選出所有藍(lán)色元素的索引。
案例 3:文本處理中的行號(hào)標(biāo)注
在處理文本文件時(shí),enumerate函數(shù)可用于給每一行添加行號(hào)。
with open('example.txt', 'r', encoding='utf-8') as file: for line_number, line in enumerate(file, start = 1): print(f"第 {line_number} 行: {line.strip()}")
這樣在查看文本內(nèi)容時(shí),能清晰知道每一行的行號(hào),方便定位和處理文本數(shù)據(jù)。
閉坑指南
對(duì)不可迭代對(duì)象使用
enumerate函數(shù)只能用于可迭代對(duì)象,如果傳入不可迭代對(duì)象,會(huì)報(bào)錯(cuò)。
number = 123 # 錯(cuò)誤示范,會(huì)拋出 TypeError: 'int' object is not iterable for index, value in enumerate(number): pass
確保傳入enumerate函數(shù)的是列表、字符串、元組、文件對(duì)象等可迭代對(duì)象。
誤解索引和元素順序
在for循環(huán)中,接收enumerate返回值時(shí),索引在前,元素在后,順序不能錯(cuò)。
words = ['hello', 'world'] # 錯(cuò)誤示范,會(huì)導(dǎo)致變量賦值錯(cuò)誤 for word, index in enumerate(words): pass
正確寫法是for index, word in enumerate(words): ,保持索引在前,元素在后的順序。
不恰當(dāng)?shù)钠鹗妓饕?/h3>
設(shè)置起始索引時(shí),要根據(jù)實(shí)際需求合理設(shè)定。如果起始索引設(shè)置不當(dāng),可能導(dǎo)致邏輯錯(cuò)誤。
# 假設(shè)要統(tǒng)計(jì)學(xué)生考試排名,從1開始更合理 ranks = [1, 2, 3] # 錯(cuò)誤示范,起始索引設(shè)為0不符合排名習(xí)慣 for rank, student in enumerate(ranks, start = 0): print(f"排名第 {rank} 的學(xué)生成績(jī)是 {student}")
應(yīng)根據(jù)實(shí)際場(chǎng)景,如排名場(chǎng)景,將起始索引設(shè)為 1 。
專家工具箱
1. 與zip函數(shù)聯(lián)用
enumerate和zip函數(shù)結(jié)合,可以在遍歷多個(gè)可迭代對(duì)象時(shí),同時(shí)獲取索引和對(duì)應(yīng)元素。
names = ['Alice', 'Bob', 'Charlie'] ages = [25, 30, 35] for index, (name, age) in enumerate(zip(names, ages), start = 1): print(f"序號(hào) {index},姓名 {name},年齡 {age}") # 輸出: # 序號(hào) 1,姓名 Alice,年齡 25 # 序號(hào) 2,姓名 Bob,年齡 30 # 序號(hào) 3,姓名 Charlie,年齡 35
2. 結(jié)合lambda函數(shù)
在一些需要對(duì)索引和元素進(jìn)行復(fù)雜操作的場(chǎng)景中,結(jié)合lambda函數(shù)能實(shí)現(xiàn)更靈活的處理。
nums = [1, 2, 3, 4, 5] result = list(map(lambda x: x[0] * x[1], enumerate(nums))) print(result) # 輸出:[0, 2, 6, 12, 20]
這里lambda函數(shù)將索引和對(duì)應(yīng)元素相乘,map函數(shù)應(yīng)用這個(gè)操作到整個(gè)列表。
3. 用于while循環(huán)模擬for循環(huán)遍歷
雖然enumerate函數(shù)常與for循環(huán)搭配,但在某些情況下,也可以在while循環(huán)中模擬類似功能。
my_list = ['a', 'b', 'c'] index = 0 while index < len(my_list): value = my_list[index] print(f"索引 {index} 處的值是 {value}") index += 1
這種方式在一些需要更復(fù)雜循環(huán)控制邏輯,但又想實(shí)現(xiàn)類似enumerate功能的場(chǎng)景中比較有用。
小白:(恍然大悟)原來(lái)enumerate函數(shù)有這么多巧妙用法!
專家:(微笑)記?。赫莆誩numerate函數(shù),遍歷數(shù)據(jù)時(shí)獲取索引將變得輕松又高效!
常用操作速查表
操作 | 代碼示例 | 說(shuō)明 |
基本遍歷獲取索引 | for index, value in enumerate([1, 2, 3]) | 遍歷列表同時(shí)獲取索引 |
設(shè)定起始索引 | for index, value in enumerate([1, 2, 3], start = 1) | 從指定數(shù)字開始計(jì)數(shù) |
修改特定位置元素 | for index, value in enumerate([1, 2, 3]): if index == 1: list[index] = 5 | 根據(jù)索引修改列表元素 |
查找元素位置 | [index for index, value in enumerate([1, 2, 1, 3]) if value == 1] | 找到特定元素的所有索引 |
總結(jié)
到此這篇關(guān)于Python中enumerate函數(shù)詳解之遍歷中的索引神器的文章就介紹到這了,更多相關(guān)Python遍歷索引enumerate函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入剖析Python的爬蟲框架Scrapy的結(jié)構(gòu)與運(yùn)作流程
這篇文章主要介紹了Python的爬蟲框架Scrapy的結(jié)構(gòu)與運(yùn)作流程,并以一個(gè)實(shí)際的項(xiàng)目來(lái)講解Scrapy的原理機(jī)制,十分推薦!需要的朋友可以參考下2016-01-01python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長(zhǎng)的方法
今天小編就為大家分享一篇python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長(zhǎng)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02跟老齊學(xué)Python之集成開發(fā)環(huán)境(IDE)
IDE的全稱是:Integrated Development Environment,簡(jiǎn)稱IDE,也稱為Integration Design Environment、Integration Debugging Environment,翻譯成中文叫做“集成開發(fā)環(huán)境”,在臺(tái)灣那邊叫做“整合開發(fā)環(huán)境”。2014-09-09django model的update時(shí)auto_now不被更新的原因及解決方式
這篇文章主要介紹了django model的update時(shí)auto_now不被更新的原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04python自動(dòng)打開瀏覽器下載zip并提取內(nèi)容寫入excel
這篇文章主要給大家介紹了關(guān)于python自動(dòng)打開瀏覽器下載zip并提取內(nèi)容寫入excel的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01