enumerate()

Содержание
Введение
Синтаксис
Пример
Разбор
Удаление строк по номеру
Alt Caps: Чередование заглавных букв
Похожие статьи

Введение

В этой статье вы узнаете как работает функция enumerate() в Python 3.

enumerate() получает итерируемый объект а возвращает набор кортежей вида (индекс элемента, элемент)

Если хотите повторить примеры из статьи - создайте файл enumerate_demo.py и копируйте туда код из примеров.

Запустить файл можно командой

python3 enumerate_demo.py

Синтаксис

enumerate(iterable, start=0)

Официальная документация

Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration.

The __next__() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.

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

Equivalent to:

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

Пример

Пройдёмся функцией enumerate() по списку и заодно убедимся, что возвращаются кортежи (tuple)

sites = ["heihei.ru", "topbicycle.ru", "urn.su"] for site in enumerate(sites): print(f"site: {site}, type(site): {type(site)}")

site: (0, 'heihei.ru'), type(site): <class 'tuple'> site: (1, 'topbicycle.ru'), type(site): <class 'tuple'> site: (2, 'urn.su'), type(site): <class 'tuple'>

Подробности

Разберём способы итерации по объектам списка

letters = ['a', 'b', 'c', 'd', 'e'] for letter in letters: print(letter)

python enumerate_demo.py

a b c d e

Если нужно показать не только элемент, но и его индекс - это легко сделать вручную, добавив переменную.

index = 0 letters = ['a', 'b', 'c', 'd', 'e'] for letter in letters:     print(index, letter)     index += 1

0 a 1 b 2 c 3 d 4 e

В качестве альтернативы можно использовать range() или while в сочетании с len()

for index in range(len(letters)):     print('letters[', index, '] =', letters[index]) # или index = 0 while index < len(letters): print('letters[', index, '] =', letters[index]) index += 1

python enumerate_demo.py

letters[ 0 ] = a letters[ 1 ] = b letters[ 2 ] = c letters[ 3 ] = d letters[ 4 ] = e

Чтобы пользоваться одновременно двумя переменными используется функция enumerate()

for index, item in enumerate(letters): print('letters', index, '=', item)

python enumerate_demo.py

letters 0 = a letters 1 = b letters 2 = c letters 3 = d letters 4 = e

enumerate() возвращает итератор (iterator) , в котором можно итерировать по последовательности кортежей (tuple) вида (index, item)

Чтобы лучше понять происходящее добавьте в скрипт следующий код

enum_obj = enumerate(letters) print(next(enum_obj)) print(next(enum_obj)) print(next(enum_obj)) print(type(enum_obj))

(0, 'a') (1, 'b') (2, 'c') <class 'enumerate'>

Пример применения enumerate() вместе с glob для поиска и подсчёта файлов.

Удаление строк по номеру

Чтобы лучше понять этот пример, нужно освоить материал статьи «Основы работы с файлами в Python»

Если из какого-то файла нужно удалить определённый диапазон строк - enumarate() придётся очень кстати.

Рассмотрим файл sample.txt

cat sample.txt

First line Second line Third line Fourth line Fifth line Sixth line Seventh line Eighth line

Чтобы удалить строки 4 и 7 воспользуемся скриптом

# list to store file lines lines = [] path = "sample.txt" # Read file with open(path, 'r') as f: # read an store all lines into list lines = f.readlines() # Write file with open(path, 'w') as f: # iterate each line for number, line in enumerate(lines): # delete line 5 and 8. or pass any Nth line you want to remove # note list index starts from 0 if number not in [4, 7]: f.write(line)

python delete.lines.py
cat sample.txt

First line Second line Third line Fourth line Sixth line Seventh line

Alt Caps

С помощью enumerate() можно сделать чередование заглавных и строчных букв.

В англоязычном интернете это называется Alt Caps и обычно обозначает иронию. В этом примере, я безо всякой иронии прошу вас подписаться на мой телеграм канал aofeed

def alt_caps(s: str) -> str: temp: list[str] = [] for i,c in enumerate(s): if i % 2 == 0: temp.append(c.upper()) else: temp.append(c.lower()) return ''.join(temp) if __name__ == '__main__': text: str = 'Subscribe to t.me/aofeed' print(alt_caps(text))

python alt_caps.py

SuBsCrIbE To t.mE/AoFeEd

Похожие статьи
Функции
Python
*args **kwargs
sys.argv: аргументы командной строки
Лямбда функции
Функции первого класса
Замыкания
Декораторы
Кэширование
if, elif, else
Циклы
Методы
enum
Генераторы
Генераторы: Maintaining State
Встроенные фукнции: all()zip()
dir()
id()
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......