🍁 Rokitsky.ru

22 дСкабря 2020 Π³.

πŸ“ƒ enumarate() - ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ списки с Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ

Π¦ΠΈΠΊΠ» for ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты Π² ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…. Ну Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ индСкс (Π½ΠΎΠΌΠ΅Ρ€) элСмСнта, для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ счётчик.

array = ['ΠœΠΈΡ…Π°ΠΈΠ»', 'АлСксандр', 'Василий', 'АлСксСй']
count = 0
for element in array:
    count += 1
    print(count, ':', element)
1 : ΠœΠΈΡ…Π°ΠΈΠ»
2 : АлСксандр
3 : Василий
4 : АлСксСй

Π—Π½Π°Ρ‚ΡŒ индСкс элСмСнта Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто, поэтому Π² Python Π΅ΡΡ‚ΡŒ для этого ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ встроСнная функция enumerate(), которая избавляСт нас ΠΎΡ‚ надобности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ счётчик.

enumerate(iterable, start=0)

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

Π’ энумСрСйт ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (строки, списки, сСты, словари, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ‚.Π΄.). ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ состоящий ΠΈΠ· индСкса ΠΈ самого элСмСнта:

for i in enumerate(array):
    print(i)
(0, 'ΠœΠΈΡ…Π°ΠΈΠ»')
(1, 'АлСксандр')
(2, 'Василий')
(3, 'АлСксСй')

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ, Ссли ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

for index, element in enumerate(array):
    print(index, ':', element)
0 : ΠœΠΈΡ…Π°ΠΈΠ»
1 : АлСксандр
2 : Василий
3 : АлСксСй

НачинаСм с Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ индСкса

МоТСм Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСкс начинаСтся с нуля, Π½ΠΎ Π½Π°ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° 1 большС. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΊ индСксу: print(index + 1, ':', element), Π½ΠΎ для этого ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ start Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Он ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎ, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ.

for index, element in enumerate(array, start=1):
    print(index, ':', element)
1 : ΠœΠΈΡ…Π°ΠΈΠ»
2 : АлСксандр
3 : Василий
4 : АлСксСй

Наоборот

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, с послСднСго элСмСнта Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ энумСрСйт Π²ΠΎ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sorted() с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ reverse=True.

for index, element in sorted(enumerate(array, start=1), reverse=True):
    print(index, ':', element)
4 : АлСксСй
3 : Василий
2 : АлСксандр
1 : ΠœΠΈΡ…Π°ΠΈΠ»

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

По-сути энумСрСйт - это Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ индСкс ΠΈ элСмСнт. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

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