enumerate() 函數的簡單介紹
enumerate() 函數的概念:
- enumerate() 函數:用於將一個可迭代的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
再來看看enumerate() 函數的語法結構:
- enumerate(sequence, [start=0]),其中sequence是一個可迭代序列,start是一個可選參數,表示序列下標的起始位置;
關於enumerate()函數,有以下幾點需要注意:
- ① enumerate()函數是Python中的內置函數,可以直接配合for循環使用;
- ② 默認情況下,start參數索引計數器是從零開始計數的,但是你可以將其設置為任意的整數;
- ③ enumerate()函數得到的是多個值,我們需要采用“序列解包”的方式,獲取到每一個元素;
可迭代對象和序列解包
可迭代對象
通俗的講:可迭代指的就是我們可以循環獲取其中的每一個元素。某對象可以使用for循環的必要條件是該對象是可迭代的。
你可能還不知道什么是可迭代對象,這里也不過多的去解釋,你如果想深入了解它,可以自行下去查資料,但是這里我要講述 “如何判斷一個對象是可迭代對象”。
- 可以通過內置函數isinstance()來判斷一個對象是否為可迭代對象。
from collections.abc import Iterable
print(isinstance("梁某人", Iterable))
# True
print(isinstance([1,True,2.3],Iterable))
# True
print(isinstance(1, Iterable))
# False
print(isinstance(range(10), Iterable))
# True
通過上述代碼演示,我們就知道哪些對象是可迭代對象,可以使用for循環,哪些對象不是可迭代對象,也不能使用for循環。
在Python基礎中,我們還將到了一個“序列”的概念,其實序列也是一種可迭代對象,其中列表( list)、元組( tuple)、字符串( str)等都是序列,因此它們也都是可迭代對象,也就都可以配合enumerate()函數使用了。
序列解包
通俗的說:就是一次將多個變量賦值給多個值。很簡單,不要想的太高深,我們簡單舉個例子你就知道了。
x, y = (12, 54)
print(x) # 12
print(y) # 54
結果如下:
enumerate() 函數的簡單使用
該函數最常就是配合for循環使用,我們就以此為例,為大家演示enumerate() 函數的用法。
需求:打印出班級中大於18歲的同學名字;
如果使用普通的for循環:
i = 0
name = ["張三", "李四", "王五"]
lis = [13, 22, 43]
for element in lis:
if element >= 18:
print(i, name[i], lis[i])
i += 1
結果如下:
如果for循環,配合enumerate()函數使用:
name = ["張三", "李四", "王五"]
lis = [13, 22, 43]
for index, value in enumerate(lis):
if value >= 18:
print(index, name[index], value)
結果如下:
普通for循環我也就不多說了。仔細觀察for循環+enumerate()函數的搭配使用,序列使用過該函數后,會返回元素下標和元素組合的元組,我們采用序列解包的方式,將其賦值給了index和value,其中index表示lis列表中每個元素的下標,value表示lis列表中每個元素的值,如下圖所示:
接着再仔細觀察上圖,可以發現:enumerate()函數默認序列第一個元素的下標為0,這個也是和Python中序列的元素訪問一致。但是有時候,我們就想讓第一個元素的下標變為1,第二個元素的下標變為2,怎么辦呢?
從上圖可以看出:enumerate()函數中有一個start參數,很好的幫我們解決了上述問題。
其實關於這個函數的用法,大家不必說要鑽的多深,掌握它最通俗的用法就夠了,相信它未來會幫助你很多。