欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)

 更新時(shí)間:2021年12月13日 08:54:25   作者:華為云這區(qū)  
這篇文章主要介紹了Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán),enumerate()最大的優(yōu)點(diǎn)就是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此我們不必自己增加計(jì)數(shù)器,下面就來(lái)看看文章具體對(duì)它的詳細(xì)介紹吧,需要的朋友可以參考一下

摘要:

當(dāng)我們需要計(jì)數(shù)和迭代中的值時(shí),Pythonenumerate()允許編寫 Pythonicfor循環(huán)。最大的優(yōu)點(diǎn)enumerate()是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此您不必自己增加計(jì)數(shù)器。它還為您提供了更改計(jì)數(shù)器起始值的選項(xiàng)。

在 Python 中,for循環(huán)通常被寫成對(duì)可迭代對(duì)象的循環(huán)。這意味著您不需要計(jì)數(shù)變量來(lái)訪問(wèn)迭代中的項(xiàng)目。但有時(shí),您確實(shí)希望有一個(gè)在每次循環(huán)迭代中都會(huì)發(fā)生變化的變量。您可以使用 Python enumerate()來(lái)同時(shí)從可迭代對(duì)象中獲取計(jì)數(shù)器和值,而不是自己創(chuàng)建和增加變量!

在本教程中,我們將學(xué)到:

  • 用于enumerate()在循環(huán)中獲取計(jì)數(shù)器
  • 適用enumerate()于顯示項(xiàng)目計(jì)數(shù)
  • enumerate()與條件語(yǔ)句一起使用
  • 實(shí)現(xiàn)自己的同等功能,以enumerate()
  • 解包返回的值enumerate()

讓我們開始吧!

一、for在 Python 中使用循環(huán)進(jìn)行迭代

forPython 中的循環(huán)使用基于集合的迭代。這意味著 Python 在每次迭代時(shí)將迭代中的下一項(xiàng)分配給循環(huán)變量,如下例所示:

>>>
>>> values = ["a", "b", "c"]

>>> for value in values:
...     print(value)
...
a
b
c


在這個(gè)例子中,values是一個(gè)名單有三個(gè)字符串,"a","b",和"c"。在 Python 中,列表是一種可迭代對(duì)象。在for循環(huán)中,循環(huán)變量是value。在循環(huán)的每次迭代中,value設(shè)置為 的下一項(xiàng)values。

接下來(lái),我們打印 value到屏幕上?;诩系牡膬?yōu)勢(shì)在于它有助于避免其他編程語(yǔ)言中常見的逐一錯(cuò)誤。

現(xiàn)在想象一下,除了值本身之外,您還想在每次迭代時(shí)將列表中項(xiàng)目的索引打印到屏幕上。

處理此任務(wù)的一種方法是創(chuàng)建一個(gè)變量來(lái)存儲(chǔ)索引并在每次迭代時(shí)更新它:

>>>
>>> index = 0

>>> for value in values:
...     print(index, value)
...     index += 1
...
0 a
1 b
2 c


在本例中,index是一個(gè)整數(shù),用于跟蹤您在列表中的距離。在循環(huán)的每次迭代中,您打印index以及value. 循環(huán)的最后一步是將存儲(chǔ)的數(shù)字更新index一。

當(dāng)您忘記index在每次迭代時(shí)更新時(shí),會(huì)出現(xiàn)一個(gè)常見錯(cuò)誤:

>>>
>>> index = 0

>>> for value in values:
...     print(index, value)
...
0 a
0 b
0 c


在這個(gè)例子中,index在0每次迭代時(shí)都保持 at ,因?yàn)闆]有代碼在循環(huán)結(jié)束時(shí)更新它的值。特別是對(duì)于長(zhǎng)或復(fù)雜的循環(huán),這種錯(cuò)誤是出了名的難以追蹤。

解決此問(wèn)題的另一種常見方法是使用range()結(jié)合len()自動(dòng)創(chuàng)建索引。這樣,您就不需要記住更新索引:

>>>
>>> for index in range(len(values)):
...     value = values[index]
...     print(index, value)
...
0 a
1 b
2 c


在本例中,len(values)返回 的長(zhǎng)度values,即3。然后range()創(chuàng)建一個(gè)迭代器,從默認(rèn)的起始值開始運(yùn)行,0直到它達(dá)到len(values)負(fù)一。在這種情況下,index成為您的循環(huán)變量。在循環(huán)中,您將當(dāng)前值設(shè)置為value等于 中的項(xiàng)目。最后,您打印和。valuesindexindexvalue

在此示例中,可能發(fā)生的一個(gè)常見錯(cuò)誤是您value在每次迭代開始時(shí)忘記更新。這類似于之前忘記更新索引的錯(cuò)誤。這是該循環(huán)不被視為Pythonic 的原因之一。

這個(gè)例子也有一些限制,因?yàn)?code>values必須允許使用整數(shù)索引訪問(wèn)它的項(xiàng)目。允許這種訪問(wèn)的可迭代對(duì)象在 Python中稱為序列。

技術(shù)細(xì)節(jié):根據(jù)Python 文檔,可迭代對(duì)象是可以一次返回一個(gè)成員的任何對(duì)象。根據(jù)定義,可迭代對(duì)象支持迭代器協(xié)議,該協(xié)議指定在迭代器中使用對(duì)象時(shí)如何返回對(duì)象成員。

Python 有兩種常用的可迭代類型:

  • 序列
  • 發(fā)電機(jī)

任何可迭代對(duì)象都可以在for循環(huán)中使用,但只能通過(guò)整數(shù)索引訪問(wèn)序列。

嘗試通過(guò)生成器或迭代器的索引訪問(wèn)項(xiàng)目將引發(fā)TypeError:

>>>
>>> enum = enumerate(values)
>>> enum[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'enumerate' object is not subscriptable


在此示例中,您將返回值分配enumerate()enumenumerate()是一個(gè)迭代器,因此嘗試通過(guò)索引訪問(wèn)其值會(huì)引發(fā)TypeError.

幸運(yùn)的是,Pythonenumerate()可以讓您避免所有這些問(wèn)題。它是一個(gè)內(nèi)置函數(shù),這意味著自從2003 年在 Python 2.3中添加它以來(lái),它在每個(gè)版本的 Python 中都可用。

二、使用 Python 的 enumerate()

您可以enumerate()以與使用原始可迭代對(duì)象幾乎相同的方式在循環(huán)中使用。不是將可迭代對(duì)象直接in放在for循環(huán)之后,而是將它放在enumerate().

我們還必須稍微更改循環(huán)變量,如下例所示:

>>>
>>> for count, value in enumerate(values):
...     print(count, value)
...
0 a
1 b
2 c


當(dāng)我們使用 時(shí)enumerate(),該函數(shù)會(huì)返回兩個(gè)循環(huán)變量:

  • 該計(jì)數(shù)當(dāng)前迭代的
  • 當(dāng)前迭代中項(xiàng)目的值

就像普通for循環(huán)一樣,循環(huán)變量可以任意命名。您在本例中使用countvalue,但它們可以命名為i和/v或任何其他有效的 Python 名稱。

使用enumerate() ,您不需要記住從可迭代對(duì)象訪問(wèn)該項(xiàng)目,并且您不需要記住在循環(huán)結(jié)束時(shí)推進(jìn)索引。一切都由 Python 的魔力自動(dòng)為您處理!

技術(shù)細(xì)節(jié):使用兩個(gè)循環(huán)變量countvalue,用逗號(hào)分隔是參數(shù)解包的一個(gè)例子。本文稍后將進(jìn)一步討論這個(gè)強(qiáng)大的 Python 特性。

Pythonenumerate()有一個(gè)額外的參數(shù),您可以使用它來(lái)控制計(jì)數(shù)的起始值。默認(rèn)情況下,起始值是0因?yàn)?Python 序列類型從零開始索引。換句話說(shuō),當(dāng)您想要檢索列表的第一個(gè)元素時(shí),您可以使用 index 0:

>>>
>>> print(values[0])
a


我們可以在此示例中看到,使用values索引訪問(wèn)0會(huì)給出第一個(gè)元素a。但是,很多時(shí)候您可能不希望從enumerate()開始計(jì)數(shù)0。例如,您可能希望打印一個(gè)自然計(jì)數(shù)數(shù)作為用戶的輸出。在這種情況下,您可以使用start參數(shù) forenumerate()來(lái)更改起始計(jì)數(shù):

>>>
>>> for count, value in enumerate(values, start=1):
...     print(count, value)
...
1 a
2 b
3 c


在本例中,您傳遞start=1,它從第一次循環(huán)迭代count的值開始1。將此與前面的示例進(jìn)行比較,其中start的默認(rèn)值為0,看看您是否能發(fā)現(xiàn)差異。

三、用 Python 練習(xí) enumerate()

我們應(yīng)該enumerate()在需要在循環(huán)中使用計(jì)數(shù)和項(xiàng)目的任何時(shí)候使用。請(qǐng)記住,enumerate()每次迭代都會(huì)將計(jì)數(shù)加一。但是,這只是略微限制了您的靈活性。由于計(jì)數(shù)是標(biāo)準(zhǔn)的 Python 整數(shù),因此您可以通過(guò)多種方式使用它。在接下來(lái)的幾節(jié)中,您將看到enumerate().

1.可迭代項(xiàng)的自然計(jì)數(shù)

在上一節(jié)中,您看到了如何使用enumerate()withstart創(chuàng)建一個(gè)自然計(jì)數(shù)數(shù)字來(lái)為用戶打印。enumerate()在 Python 代碼庫(kù)中也像這樣使用。您可以在腳本中看到一個(gè)示例,它讀取 reST 文件并在出現(xiàn)格式問(wèn)題時(shí)告訴用戶。

注意: reST,也稱為reStructured Text,是 Python 用于文檔的文本文件的標(biāo)準(zhǔn)格式。您經(jīng)常會(huì)看到在 Python 類和函數(shù)中包含作為文檔字符串的 reST 格式的字符串。讀取源代碼文件并告訴用戶格式問(wèn)題的腳本稱為linter,因?yàn)樗鼈冊(cè)诖a中尋找隱喻的lint。

這個(gè)例子是從rstlint. 不要太擔(dān)心這個(gè)函數(shù)如何檢查問(wèn)題。關(guān)鍵是要展示在現(xiàn)實(shí)世界中的使用enumerate():

 1def check_whitespace(lines):
 2    """Check for whitespace and line length issues."""
 3    for lno, line in enumerate(lines):
 4        if "\r" in line:
 5            yield lno+1, "\\r in line"
 6        if "\t" in line:
 7            yield lno+1, "OMG TABS!!!1"
 8        if line[:-1].rstrip(" \t") != line[:-1]:
 9            yield lno+1, "trailing whitespace"


check_whitespace()接受一個(gè)參數(shù),lines,它是應(yīng)該評(píng)估的文件行。在 的第三行check_whitespace() ,enumerate()用于循環(huán) over lines。這將返回行號(hào),縮寫為lno和line。由于start未使用,因此lno是文件中行的從零開始的計(jì)數(shù)器。check_whitespace()然后對(duì)不合適的字符進(jìn)行多次檢查:

  • 回車 ( \r)
  • 制表符 ( \t)
  • 行尾的任何空格或制表符

當(dāng)這些項(xiàng)目之一存在時(shí),為用戶check_whitespace() 產(chǎn)生當(dāng)前行號(hào)和有用的消息。計(jì)數(shù)變量lno已1添加到其中,以便它返回計(jì)數(shù)行號(hào)而不是從零開始的索引。當(dāng) 的用戶rstlint.py閱讀消息時(shí),他們將知道要轉(zhuǎn)到哪一行以及要修復(fù)的內(nèi)容。

2.跳過(guò)項(xiàng)目的條件語(yǔ)句

使用條件語(yǔ)句來(lái)處理項(xiàng)目是一種非常強(qiáng)大的技術(shù)。有時(shí)您可能只需要在循環(huán)的第一次迭代上執(zhí)行操作,如下例所示:

>>>
>>> users = ["Test User", "Real User 1", "Real User 2"]
>>> for index, user in enumerate(users):
...     if index == 0:
...         print("Extra verbose output for:", user)
...     print(user)
...
Extra verbose output for: Test User
Real User 1
Real User 2


在此示例中,您將列表用作用戶的模擬數(shù)據(jù)庫(kù)。第一個(gè)用戶是您的測(cè)試用戶,因此您希望打印有關(guān)該用戶的額外診斷信息。由于您已將系統(tǒng)設(shè)置為首先測(cè)試用戶,因此您可以使用循環(huán)的第一個(gè)索引值來(lái)打印額外的詳細(xì)輸出。

我們還可以將數(shù)學(xué)運(yùn)算與計(jì)數(shù)或索引的條件結(jié)合起來(lái)。例如,您可能需要從可迭代對(duì)象中返回項(xiàng)目,但前提是它們具有偶數(shù)索引。您可以使用enumerate()以下方法執(zhí)行此操作:

>>>
>>> def even_items(iterable):
...     """Return items from ``iterable`` when their index is even."""
...     values = []
...     for index, value in enumerate(iterable, start=1):
...         if not index % 2:
...             values.append(value)
...     return values
...


even_items()接受一個(gè)名為 的參數(shù),iterable它應(yīng)該是 Python 可以循環(huán)遍歷的某種類型的對(duì)象。首先,values被初始化為一個(gè)空列表。然后你用和 set創(chuàng)建一個(gè)for循環(huán)。iterableenumerate()start=1

內(nèi)for循環(huán),你檢查除以余下是否index通過(guò)2為零。如果是,則將該項(xiàng)目附加到values. 最后,您返回 values。

您可以使用列表推導(dǎo)式在一行中執(zhí)行相同的操作,而無(wú)需初始化空列表,從而使代碼更加Pythonic:

>>>
>>> def even_items(iterable):
...     return [v for i, v in enumerate(iterable, start=1) if not i % 2]
...


在此示例代碼中,even_items()使用列表推導(dǎo)式而不是for循環(huán)從列表中提取索引為偶數(shù)的每個(gè)項(xiàng)目。

您可以even_items()通過(guò)從1到的整數(shù)范圍中獲取偶數(shù)索引項(xiàng)來(lái)驗(yàn)證它是否按預(yù)期工作10。結(jié)果將是[2, 4, 6, 8, 10]:

>>>
>>> seq = list(range(1, 11))

>>> print(seq)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> even_items(seq)
[2, 4, 6, 8, 10]


正如預(yù)期的那樣,從even_items()返回偶數(shù)索引項(xiàng)seq。當(dāng)您使用整數(shù)時(shí),這不是獲得偶數(shù)的最有效方法。但是,現(xiàn)在您已經(jīng)驗(yàn)證它even_items()可以正常工作,您可以獲得 ASCII 字母表的偶數(shù)索引字母:

>>>
>>> alphabet = "abcdefghijklmnopqrstuvwxyz"

>>> even_items(alphabet)
['b', 'd', 'f', 'h', 'j', 'l', 'n', 'p', 'r', 't', 'v', 'x', 'z']


alphabet是一個(gè)字符串,它包含 ASCII 字母表的所有 26 個(gè)小寫字母。調(diào)用even_items()和傳遞alphabet返回字母表中交替字母的列表。

Python 字符串是序列,可用于循環(huán)以及整數(shù)索引和切片。因此,對(duì)于字符串,您可以使用方括號(hào)even_items()更有效地實(shí)現(xiàn)相同的功能:

>>>
>>> list(alphabet[1::2])
['b', 'd', 'f', 'h', 'j', 'l', 'n', 'p', 'r', 't', 'v', 'x', 'z']


在這里使用字符串切片,你給出起始索引1,它對(duì)應(yīng)于第二個(gè)元素。第一個(gè)冒號(hào)之后沒有結(jié)束索引,因此 Python 會(huì)轉(zhuǎn)到字符串的末尾。然后添加第二個(gè)冒號(hào),后跟 a,2以便 Python 將采用所有其他元素。

但是,正如您之前看到的,生成器和迭代器不能被索引或切片,因此您仍然會(huì)發(fā)現(xiàn)它們enumerate()很有用。要繼續(xù)上一個(gè)示例,您可以創(chuàng)建一個(gè)生成器函數(shù),根據(jù)需要生成字母表中的字母:

>>>
>>> def alphabet():
...     alpha = "abcdefghijklmnopqrstuvwxyz"
...     for a in alpha:
...         yield a

>>> alphabet[1::2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'function' object is not subscriptable

>>> even_items(alphabet())
['b', 'd', 'f', 'h', 'j', 'l', 'n', 'p', 'r', 't', 'v', 'x', 'z']

在此示例中,您定義alphabet()了一個(gè)生成器函數(shù),當(dāng)該函數(shù)在循環(huán)中使用時(shí),它會(huì)一個(gè)一個(gè)地生成字母表中的字母。Python 函數(shù),無(wú)論是生成器還是常規(guī)函數(shù),都無(wú)法通過(guò)方括號(hào)索引訪問(wèn)。你在第二行試試這個(gè),它會(huì)引發(fā)一個(gè)TypeError.

不過(guò),您可以在循環(huán)中使用生成器函數(shù),并且您可以在最后一行傳遞alphabet()even_items(). 可以看到結(jié)果和前面兩個(gè)例子是一樣的。

四、理解 Python enumerate()

在最后幾節(jié)中,您看到了何時(shí)以及如何enumerate()發(fā)揮優(yōu)勢(shì)的示例。現(xiàn)在您已經(jīng)掌握了 的實(shí)際方面enumerate(),您可以了解更多有關(guān)該函數(shù)如何在內(nèi)部工作的信息。

為了更好地了解enumerate()工作原理,您可以使用 Python 實(shí)現(xiàn)您自己的版本。您的版本enumerate()有兩個(gè)要求。這應(yīng)該:

  • 接受一個(gè)可迭代和一個(gè)起始計(jì)數(shù)值作為參數(shù)
  • 發(fā)回一個(gè)包含當(dāng)前計(jì)數(shù)值和可迭代對(duì)象相關(guān)項(xiàng)的元組

Python 文檔中給出了一種編寫滿足這些規(guī)范的函數(shù)的方法:

>>>
>>> def my_enumerate(sequence, start=0):
...     n = start
...     for elem in sequence:
...         yield n, elem
...         n += 1
...


my_enumerate()接受兩個(gè)參數(shù),sequence和start。默認(rèn)值start是0。在函數(shù)定義中,您初始化n為 的值start并for在sequence.

對(duì)于每一個(gè)elem在sequence你yield控制返回給調(diào)用位置和發(fā)送回的當(dāng)前值n和elem。最后,您遞增n以準(zhǔn)備下一次迭代。您可以my_enumerate()在此處查看實(shí)際操作:

>>>
>>> seasons = ["Spring", "Summer", "Fall", "Winter"]

>>> my_enumerate(seasons)
<generator object my_enumerate at 0x7f48d7a9ca50>

>>> list(my_enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

>>> list(my_enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]


首先,您創(chuàng)建要使用的四個(gè)季節(jié)的列表。接下來(lái),您將展示調(diào)用my_enumerate()with seasonsassequence創(chuàng)建一個(gè)生成器對(duì)象。這是因?yàn)槟褂脃ield關(guān)鍵字將值發(fā)送回調(diào)用者。

最后,創(chuàng)建兩個(gè)列表my_enumerate() ,在其中起始值被保留為默認(rèn),0在其中,一個(gè)start改變?yōu)?。在這兩種情況下,您最終都會(huì)得到一個(gè)元組列表,其中每個(gè)元組的第一個(gè)元素是計(jì)數(shù),第二個(gè)元素是來(lái)自 的值seasons

盡管您enumerate()只需幾行 Python 代碼即可實(shí)現(xiàn)等效的函數(shù),但實(shí)際的代碼enumerate() 是用 C 編寫的。這意味著它超級(jí)快速和高效。

五、解包參數(shù) enumerate()

當(dāng)您enumerate()在for循環(huán)中使用時(shí),您告訴 Python 使用兩個(gè)變量,一個(gè)用于計(jì)數(shù),另一個(gè)用于值本身。您可以通過(guò)使用稱為參數(shù)解包的 Python 概念來(lái)做到這一點(diǎn)。

參數(shù)解包的思想是,一個(gè)元組可以根據(jù)序列的長(zhǎng)度分成幾個(gè)變量。例如,您可以將包含兩個(gè)元素的元組解包為兩個(gè)變量:

>>>
>>> tuple_2 = (10, "a")
>>> first_elem, second_elem = tuple_2
>>> first_elem
10
>>> second_elem
'a'


首先,您創(chuàng)建一個(gè)包含兩個(gè)元素的元組,10和"a"。然后將該元組解包到first_elemand second_elem,每個(gè)都從元組中分配一個(gè)值。

當(dāng)您調(diào)用enumerate()并傳遞一系列值時(shí),Python 會(huì)返回一個(gè)迭代器。當(dāng)您向迭代器詢問(wèn)其下一個(gè)值時(shí),它會(huì)生成一個(gè)包含兩個(gè)元素的元組。元組的第一個(gè)元素是計(jì)數(shù),第二個(gè)元素是您傳遞的序列中的值:

>>>
>>> values = ["a", "b"]
>>> enum_instance = enumerate(values)
>>> enum_instance
<enumerate at 0x7fe75d728180>
>>> next(enum_instance)
(0, 'a')
>>> next(enum_instance)
(1, 'b')
>>> next(enum_instance)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration


在此示例中,您創(chuàng)建了一個(gè)列表,該列表values包含兩個(gè)元素"a"和"b"。然后傳遞valuesenumerate()并將返回值分配給enum_instance . 當(dāng)您打印時(shí)enum_instance ,您可以看到它是一個(gè)enumerate()具有特定內(nèi)存地址的實(shí)例。

然后使用 Python 的內(nèi)置next()函數(shù)從enum_instance. enum_instance返回的第一個(gè)值是一個(gè)元組,其中包含計(jì)數(shù)0和來(lái)自 的第一個(gè)元素values,即"a"。

next()再次調(diào)用on 會(huì)enum_instance產(chǎn)生另一個(gè)元組,這次是計(jì)數(shù)1和來(lái)自values,的第二個(gè)元素"b"。最后,由于沒有更多的值要從 返回,所以再調(diào)用next()一次會(huì)增加。StopIterationenum_instance

在for循環(huán)中使用可迭代對(duì)象時(shí),Python 會(huì)next()在每次迭代開始時(shí)自動(dòng)調(diào)用,直到StopIteration引發(fā)。Python 將從可迭代對(duì)象中檢索到的值分配給循環(huán)變量。

如果可迭代對(duì)象返回一個(gè)元組,則可以使用參數(shù)解包將元組的元素分配給多個(gè)變量。這是您在本教程前面通過(guò)使用兩個(gè)循環(huán)變量所做的。

另一次您可能已經(jīng)看到使用for循環(huán)解包參數(shù)是使用內(nèi)置的zip(),它允許您同時(shí)迭代兩個(gè)或多個(gè)序列。

在每次迭代中,zip()返回一個(gè)元組,該元組從所有傳遞的序列中收集元素:

>>>
>>> first = ["a", "b", "c"]
>>> second = ["d", "e", "f"]
>>> third = ["g", "h", "i"]
>>> for one, two, three in zip(first, second, third):
...     print(one, two, three)
...
a d g
b e h
c f i


通過(guò)使用zip(),可以遍歷first,second以及third在同一時(shí)間。在for循環(huán)中,您分配元素 from firstto one、 from secondtotwo from thirdto three。然后打印三個(gè)值。

我們可以組合zip()和enumerate()使用嵌套參數(shù)解包:

>>>
>>> for count, (one, two, three) in enumerate(zip(first, second, third)):
...     print(count, one, two, three)
...
0 a d g
1 b e h
2 c f i


在for此示例的循環(huán)中,您嵌套zip()在enumerate(). 這意味著每次for循環(huán)迭代時(shí),都會(huì)enumerate()產(chǎn)生一個(gè)元組,其中第一個(gè)值作為計(jì)數(shù),第二個(gè)值作為另一個(gè)元組,其中包含從參數(shù)到 的元素zip()。要解壓嵌套結(jié)構(gòu),您需要添加括號(hào)以從zip().

還有其他方法可以模擬enumerate()與zip(). 一種方法使用itertools.count(),它默認(rèn)返回從零開始的連續(xù)整數(shù)。您可以將前面的示例更改為使用itertools.count():

>>>
>>> import itertools
>>> for count, one, two, three in zip(itertools.count(), first, second, third):
...     print(count, one, two, three)
...
0 a d g
1 b e h
2 c f i


itertools.count()在這個(gè)例子中,您可以使用一個(gè)單一的zip()呼叫產(chǎn)生計(jì)數(shù)以及沒有嵌套參數(shù)拆包的循環(huán)變量。

六、結(jié)論

當(dāng)您需要計(jì)數(shù)和迭代中的值時(shí),Pythonenumerate()允許您編寫 Pythonicfor循環(huán)。最大的優(yōu)點(diǎn)enumerate()是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此您不必自己增加計(jì)數(shù)器。它還為您提供了更改計(jì)數(shù)器起始值的選項(xiàng)。

總結(jié):

  • enumerate()在for循環(huán)中使用 Python
  • 應(yīng)用enumerate()在幾個(gè)現(xiàn)實(shí)世界的例子中
  • enumerate()使用參數(shù)解包獲取值
  • 實(shí)現(xiàn)自己的同等功能,以enumerate()

我們還看到enumerate()在一些實(shí)際代碼中使用,包括在CPython代碼存儲(chǔ)庫(kù)中。您現(xiàn)在擁有簡(jiǎn)化循環(huán)并使 Python 代碼時(shí)尚的超能力!

到此這篇關(guān)于Python enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)的文章就介紹到這了,更多相關(guān)Python enumerate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python動(dòng)態(tài)參數(shù)/命名空間/函數(shù)嵌套/global和nonlocal

    Python動(dòng)態(tài)參數(shù)/命名空間/函數(shù)嵌套/global和nonlocal

    這篇文章主要介紹了Python動(dòng)態(tài)參數(shù)/命名空間/函數(shù)嵌套/global和nonlocal,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • Django初步使用Celery處理耗時(shí)任務(wù)和定時(shí)任務(wù)問(wèn)題

    Django初步使用Celery處理耗時(shí)任務(wù)和定時(shí)任務(wù)問(wèn)題

    這篇文章主要介紹了Django初步使用Celery處理耗時(shí)任務(wù)和定時(shí)任務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python Flask-Login實(shí)現(xiàn)用戶會(huì)話管理

    Python Flask-Login實(shí)現(xiàn)用戶會(huì)話管理

    這篇文章主要介紹了Python Flask-Login實(shí)現(xiàn)用戶會(huì)話管理過(guò)程,F(xiàn)lask-Login為Flask提供用戶會(huì)話管理。它處理登錄、注銷和長(zhǎng)時(shí)間記住用戶會(huì)話等常見任務(wù)
    2022-12-12
  • 如何用python反轉(zhuǎn)圖片,視頻

    如何用python反轉(zhuǎn)圖片,視頻

    這篇文章主要介紹了如何用python反轉(zhuǎn)圖片,視頻,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2021-04-04
  • Python中元組解構(gòu)的技巧詳解

    Python中元組解構(gòu)的技巧詳解

    在Python中,元組(tuple)是一種常用的數(shù)據(jù)結(jié)構(gòu),元組的解構(gòu)是一項(xiàng)強(qiáng)大的特性,快速、方便地將元組中的值分配給多個(gè)變量,下面我們就來(lái)學(xué)習(xí)一下Python中元組解構(gòu)的技巧吧
    2024-01-01
  • Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼

    Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的無(wú)損放大圖片小程序,可以支持將JPG/PNG圖片無(wú)損放大上萬(wàn)像素,感興趣的可以了解一下
    2022-08-08
  • flask框架json數(shù)據(jù)的拿取和返回操作示例

    flask框架json數(shù)據(jù)的拿取和返回操作示例

    這篇文章主要介紹了flask框架json數(shù)據(jù)的拿取和返回操作,結(jié)合實(shí)例形式分析了flask框架針對(duì)json格式數(shù)據(jù)的解析、數(shù)據(jù)庫(kù)操作與輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python的argparse庫(kù)使用詳解

    Python的argparse庫(kù)使用詳解

    argparse是python標(biāo)準(zhǔn)庫(kù)里面用來(lái)處理命令行參數(shù)的庫(kù),這篇文章主要介紹了Python的argparse庫(kù)使用詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Python爬蟲爬取、解析數(shù)據(jù)操作示例

    Python爬蟲爬取、解析數(shù)據(jù)操作示例

    這篇文章主要介紹了Python爬蟲爬取、解析數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了Python爬蟲爬取、解析、存儲(chǔ)數(shù)據(jù)相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Python實(shí)現(xiàn)批量導(dǎo)入1000條xlsx數(shù)據(jù)

    Python實(shí)現(xiàn)批量導(dǎo)入1000條xlsx數(shù)據(jù)

    本文主要介紹了Python實(shí)現(xiàn)批量導(dǎo)入1000條xlsx數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論