138628

🐍 Python enumerate: ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ счСтчиков

ВмСсто ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ создания ΠΈ увСличСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ enumerate() для получСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ счСтчика ΠΈ значСния ΠΈΠ· ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ публикуСтся с сокращСниями, Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Bryan Weber.

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ² for

Π¦ΠΈΠΊΠ» for Π² Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° основС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Python Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт ΠΈΠ· iterable ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

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

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

Π—Π΄Π΅ΡΡŒ значСния состоят ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк: a, b ΠΈ c. Π’ Python списки – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² iterable. Π’ Ρ†ΠΈΠΊΠ»Π΅ for пСрСмСнная ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ value. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту ΠΈΠ· values.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибки off-by-one, которая часто встрСчаСтся Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ЯП.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ вывСсти Π² спискС индСкс элСмСнта Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Один ΠΈΠ· способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния индСкса ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΅Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:

>>> index = 0

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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ index – Ρ†Π΅Π»ΠΎΠ΅ число, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅, ΠΊΠ°ΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² спискС. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° экран выводится index ΠΈ value. ПослСдним шагом Π² Ρ†ΠΈΠΊΠ»Π΅ являСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ числа, хранящСгося Π² index. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΠΏΠ»Ρ‹Ρ‚ΡŒ ошибка, Ссли Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ index:

>>> index = 0

>>> for value in values:
...     print(index, value)
...
0 a
0 b
0 c
πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python
ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ index остаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0, Ρ‚. ΠΊ. Π½Π΅Ρ‚ ΠΊΠΎΠ΄Π° для Π΅Π³ΠΎ обновлСния. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ошибки Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, особСнно Π² Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΈ слоТных Ρ†ΠΈΠΊΠ»Π°Ρ….

Π”Ρ€ΡƒΠ³ΠΎΠΉ распространСнный способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ range() Π² сочСтании с len() для автоматичСского создания index, ΠΈ Π²Π°ΠΌ Π½Π΅ придСтся ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ:

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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ len(values) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ value, Ρ€Π°Π²Π½ΡƒΡŽ 3. Π—Π°Ρ‚Π΅ΠΌ range() создаСт ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ value (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнуто len(values) – 1. Π’ Ρ†ΠΈΠΊΠ»Π΅ устанавливаСтся value, Ρ€Π°Π²Π½ΠΎΠ΅ элСмСнту ΠΏΡ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ value index. НаконСц, выводится value ΠΈ index.

Одной ΠΈΠ· ошибок ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отсутствиС обновлСния value Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ values Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ доступ ΠΊ своим элСмСнтам с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ цСлочислСнных индСксов. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ этот Π²ΠΈΠ΄ доступа, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ.

Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python, iterable – это любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ свои Ρ‡Π»Π΅Π½Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π·. Π’ Python Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

Π’ Ρ†ΠΈΠΊΠ»Π΅ for ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ доступны ΠΏΠΎ цСлочислСнным индСксам. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΏΠΎ индСксу ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError:

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

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, функция enumerate() позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ всС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Она доступна Π² Python с вСрсии 2.3.

ИспользованиС enumerate()

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ enumerate() Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ iterable. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ нСпосрСдствСнно послС in Π² Ρ†ΠΈΠΊΠ» for, Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π΅Π΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки enumerate(). ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

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

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ enumerate(), функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π°: количСство Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Как ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ for, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ count ΠΈ value Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅). Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΠ· ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту ΠΈ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ индСкс Π² ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π° – всС дСлаСтся автоматичСски.

Ѐункция enumerate() ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 0, ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ индСкс 0:

>>> print(values[0])
a

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ доступ ΠΊ значСниям с индСксом 0 Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт a. Π‘Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ счСтчик Π½Π΅ с 0. Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ start для enumerate(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ счСтчик:

>>> for count, value in enumerate(values, start=1):
...     print(count, value)
...
1 a
2 b
3 c
🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° с enumerate()

Допустимо ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ enumerate() Π² любой ситуации, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ count ΠΈ элСмСнт Π² Ρ†ΠΈΠΊΠ»Π΅. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция enumerate() ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π”Π°Π»Π΅Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования enumerate().

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… элСмСнтов

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ enumerate() для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ скрипт, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»Ρ‹ reST ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

reST – стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° reST частыС гости, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² качСствС строк Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ исходники ΠΈ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΌΠΈ.

НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ понятно, Ρ‚. ΠΊ. Ρ†Π΅Π»ΡŒ – ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ использованиС enumerate():

def check_whitespace(lines):
    """ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΄Π»ΠΈΠ½ΠΎΠΉ строки"""
    for lno, line in enumerate(lines):
        if "\r" in line:
            yield lno+1, "\\r in line"
        if "\t" in line:
            yield lno+1, "табуляция"
        if line[:-1].rstrip(" \t") != line[:-1]:
            yield lno+1, "ΠΏΡ€ΠΎΠ±Π΅Π»"

check_whitespace() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, lines, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся строками ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки, сокращСнный ΠΊΠ°ΠΊ lno ΠΈ line, Π° Π΄Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ символы: \r, \t, табуляции ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

Когда встрСчаСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих элСмСнтов, функция Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ сообщСниС для ΡŽΠ·Π΅Ρ€Π°. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ count lno Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС Π½ΠΎΠΌΠ΅Ρ€ строки, Π° Π½Π΅ индСкс, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠ·Π½Π°Ρ‚ΡŒ мСстонахоТдСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для пропуска элСмСнтов

Иногда Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°:

>>> users = ["Test User", "Real User 1", "Real User 2"]
>>> for index, user in enumerate(users):
...     if index == 0:
...         print("Π’Ρ‹Π²ΠΎΠ΄ для:", user)
...     print(user)
...
Π’Ρ‹Π²ΠΎΠ΄ для: Test User
Real User 1
Real User 2

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ тСстовом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот ΡŽΠ·Π΅Ρ€ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Ρ†ΠΈΠΊΠ»Π° для Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

МоТно ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с условиями. НапримСр, Ссли Π²Π°ΠΌ понадобится Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ элСмСнты ΠΈΠ· ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ индСкс. Π­Ρ‚ΠΎ дСлаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> def even_items(iterable):
...     """Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ элСмСнтов ``iterable`` ΠΊΠΎΠ³Π΄Π° индСкс Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ"""
...     values = []
...     for index, value in enumerate(iterable, start=1):
...         if not index % 2:
...             values.append(value)
...     return values
...

even_items() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ iterable. ЗначСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ пустой список. Π—Π°Ρ‚Π΅ΠΌ создаСтся Ρ†ΠΈΠΊΠ» for с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enumerate() ΠΈ устанавливаСтся start=1.

Π’ Ρ†ΠΈΠΊΠ»Π΅ for провСряСтся, Ρ€Π°Π²Π΅Π½ Π»ΠΈ остаток ΠΎΡ‚ дСлСния index Π½Π° 2 Π½ΡƒΠ»ΡŽ ΠΈ Ссли Ρ‚Π°ΠΊ, Ρ‚ΠΎ элСмСнт добавляСтся ΠΊ значСниям.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ понятным, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ list comprehension Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пустого списка:

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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ even_items() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ list comprehension, Π° Π½Π΅ Ρ†ΠΈΠΊΠ» for для извлСчСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· списка, индСкс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ числом.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ even_items() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ оТидалось, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ 10. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ [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]

even_items() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΠΈΠ· seq. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ эта ΡˆΡ‚ΡƒΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° ASCII:

>>> alphabet = "abcdefghijklmnopqrstuvwxyz"

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° alphabet содСрТит Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ строчных Π±ΡƒΠΊΠ² ASCII-Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. Π’Ρ‹Π·ΠΎΠ² even_items() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° alphabet Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Ρ‡Π΅Ρ€Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π±ΡƒΠΊΠ².

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² Python – это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…, Ρ‚Π°ΠΊ ΠΈ Π² цСлочислСнном индСксировании. Π’ случаС со строками Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Π² even_items():

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

ПониманиС enumerate()

Π”ΠΎ этого ΠΌΡ‹ рассматривали ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования enumerate(). Π’Π΅ΠΏΠ΅Ρ€ΡŒ стоит Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ эта функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ enumerate(), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΡƒΠΌ трСбованиям:

  • ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ iterable ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²;
  • ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика ΠΈ связанным с Π½ΠΈΠΌ элСмСнтом ΠΈΠ· iterable.

Один ΠΈΠ· способов написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ спСцификациям ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python:

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

my_enumerate() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: sequence ΠΈ start. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ start Ρ€Π°Π²Π½ΠΎ 0. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния n ΠΈ elem ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ n, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ΠΎΡ‚ my_enumerate() Π² дСйствии:

>>> 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')]

Π’Ρ‹ создаСтС список Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… сСзонов для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Π°Π»Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² my_enumerate() с Π½ΠΈΠΌΠΈ Π² качСствС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ создаст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ происходит, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово yield отправляСт значСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

НаконСц создаСтся Π΄Π²Π° списка ΠΈΠ· my_enumerate(): Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ остаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ start измСняСтся Π½Π° 1. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом являСтся счСтчик, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· seasons.

ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ эквивалСнт enumerate() всСго ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΊΠΎΠ΄Π°, хотя ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° C для enumerate() нСсколько большС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Python ΠΎΡ‡Π΅Π½ΡŒ быстрый ΠΈ эффСктивный.

Распаковка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enumerate()

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ enumerate() Π² Ρ†ΠΈΠΊΠ»Π΅ for, Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Python Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с двумя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ: ΠΎΠ΄Π½ΠΎΠΉ для подсчСта ΠΈ ΠΎΠ΄Π½ΠΎΠΉ для значСния. ВсС это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ распаковку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² зависимости ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Ссли Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов Π² Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

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

Π‘Π½Π°Ρ‡Π°Π»Π° создаСтся ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с элСмСнтами 10 ΠΈ Β«Π°Β». Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ распаковываСтС Π΅Π³ΠΎ Π² first_elem ΠΈ second_elem, присваивая ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

Когда вызываСтся enumerate() ΠΈ пСрСдаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π° ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с двумя элСмСнтами: элСмСнт ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° (счСтчик) ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

>>> 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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с двумя элСмСнтами Β«aΒ» ΠΈ Β«bΒ». Π—Π°Ρ‚Π΅ΠΌ значСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² enumerate() ΠΈ присваиваСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ enum_instance. Когда выводится enum_instance, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это экзСмпляр enumerate() с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ адрСсом памяти.

Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ next(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· enum_instance. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – это ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с числом 0 ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Β«aΒ».

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² next() Π΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Π½Π° этот Ρ€Π°Π· с числом 1 ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ элСмСнтом ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Β«bΒ». НаконСц, Π²Ρ‹Π·ΠΎΠ² next() Π΅Ρ‰Π΅ Ρ€Π°Π· Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ StopIteration, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ большС Π½Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅ for, Python автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ next() ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΊΠ° StopIteration растСт.

Если функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ распаковку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для назначСния элСмСнтов ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° нСскольким ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π°.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ распаковку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for со встроСнным zip(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ zip() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСт элСмСнты ΠΈΠ· всСх ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ:

>>> 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

Π’ Ρ†ΠΈΠΊΠ»Π΅ элСмСнты ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ, Π° Π·Π°Ρ‚Π΅ΠΌ выводятся. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ zip() ΠΈ enumerate(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ распаковку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

>>> 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 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ zip() Π² enumerate(), Ρ‚. Π΅. ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» повторяСтся, enumerate() Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² качСствС count ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π² качСствС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с элСмСнтами ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² zip().

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ½Ρ‹Π΅ способы эмуляции повСдСния enumerate() Π² сочСтании с zip(). Один ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 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

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

enumerate() позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Pythonic-Ρ†ΠΈΠΊΠ»Ρ‹, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ счСтчик ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° interable. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ прСимущСство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с этими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, поэтому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ счСтчик ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ:

  • использованиС enumerate() Π² Ρ†ΠΈΠΊΠ»Π°Ρ… for;
  • ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ enumerate() Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…;
  • способы получСния значСния ΠΈΠ· enumerate(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ распаковку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²;
  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate().

Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ способны ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ваши Ρ†ΠΈΠΊΠ»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Python Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...