1. 程式人生 > >python中enumerate函數的用法

python中enumerate函數的用法

2.6 組成 函數 log ges 之前 臨時 ron 位置

描述

enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標。

也就是說,對於一個可叠代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。

一般用在 for 循環當中。

Python 2.3. 以上版本可用,2.6 添加 start 參數。

語法

以下是 enumerate() 方法的語法:

enumerate(sequence[,startindex=0])

參數

  • sequence -- 一個序列、叠代器或其他支持叠代對象。
  • start -- 下標起始位置。

返回值

返回 enumerate(枚舉) 對象。

相信這樣大家肯定看的似懂非懂,雲裏霧裏吧,下面來看實例~

實例

season=[spring,summer,fall,winter]
print(enumerate(season))
print(list(enumerate(season)))
for i in enumerate(season):
    print(i)
for i,element in enumerate(season):
    print(i,season[i])
    print(i)

輸出結果為:

<enumerate object at 0x000002CE4C2EC870>
[(0, spring), (1, summer), (2, fall), (3, winter)]
(0, spring)
(1, summer)
(2, fall)
(3, winter)
0 spring
0
1 summer
1
2 fall
2
3 winter
3

4個print輸出,特地也作了4個結果塊:

  首先來看第一個print,print(enumerate(season)),返回的結果是

<enumerate object at 0x000002CE4C2EC870>

  這時返回的是一個內存序列值,說明這個序列在內存中的指向是‘0x000002CE4C2EC870’。但似乎好像不怎麽像,是吧,下面例子會告訴我們,enumerate返回的的確是一個序列。

  第二個print,print(list(enumerate(season))),返回的結果是

[(0, ‘spring‘), (1, ‘summer‘), (2, ‘fall‘), (3, ‘winter‘)]

  這時返回的是一組序列,而且我們可以很確定的說,這是一個列表對象,因為用list關鍵字。但還是不怎麽像,的確,我們不接受忽悠,只接受赤裸裸的現實,請往下看。

  第三個print,for i in enumerate(season): print(i),返回的結果是

(0, ‘spring‘)
(1, ‘summer‘)
(2, ‘fall‘)
(3, ‘winter‘)

  這時返回的是下標與對應值的組合,默認下標從0開始,如果指定startindex,則從指定數開始。這時,我們應該可以確定了,enumerate返回值確實是一個序列。

  第四個print,for i,element in enumerate(season): print(i,season[i]) print(i),返回的結果是

0 spring
0
1 summer
1
2 fall
2
3 winter
3

  這次是雙變量,從返回的結果上看,第一個變量為index下標,第二個是value下標對應值。

這樣看貌似enumerate()函數也沒什麽嘛,別亂,接下來可能會刷新三觀哦~

上面的例子enumerate()的對象參數是一個列表,但enumerate可不僅僅如此,文檔上解釋是對可遍歷的對象均可用enumerate,這其中也包括字符串!請看:

abc=abcdefg
print(enumerate(abc))
print(list(enumerate(abc)))
for i in enumerate(abc):
    print(i)
for i,element in enumerate(abc):
    print(i,abc[i])

輸出結果為

<enumerate object at 0x000001B75A712828>
[(0, a), (1, b), (2, c), (3, d), (4, e), (5, f), (6, g)]
(0, a)
(1, b)
(2, c)
(3, d)
(4, e)
(5, f)
(6, g)
0 a
1 b
2 c
3 d
4 e
5 f
6 g

與列表完全一樣,意不意外?!

enumerate還有其他用處,我們先創建一個文本文檔abd123.txt,裏面借助十二生肖,每一行寫一個生肖,比如“我是一只鼠”,如圖所示

技術分享

現在要求把行數輸出來。

第一種,直接用len()函數。

f=open(C:\\Users\Ronghere\Desktop\\abc123.txt,r)
g=f.readlines()
print(len(g))

輸出結果為12,正確。但如果這個數值很大的話,效率就不可觀了~

第二種,用enumerate()函數。

f=open(C:\\Users\Ronghere\Desktop\\abc123.txt,r)
g=f.readlines()
print(len(g))
count=0
for index, line in enumerate(g):
    count += 1
print(count)

輸出結果也是12,但效率比之前的要高不少。

PS,盡量不要嵌套多層函數,這樣會耗資源,甚至會出錯,多使用變量臨時存儲下來,這是一個良好的編碼習慣。比如這次,本來是不想引入變量g的,但是嵌套進去後發現出錯了,所以臨時存儲還是有必要的,而且變量用完可以del掉,避免內存消耗。

python中enumerate函數的用法