Python поддържа много итерируеми обекти: списъци, кортежи и низове са само няколко. Цикълът for на Python е достатъчно гъвкав, за да се справя с тези обекти с лекота. По-специално, това ви спестява да се справяте сами с цифровия индекс на всеки запис.
Но понякога ще искате да работите с индекс, за да преброите или филтрирате елементи в колекция например. Научете как можете да използвате функцията за изброяване на Python, за да итерирате последователност, като същевременно следите както индекса, така и елемента.
Итерация без enumerate()
Помислете за следния списък на Python.
my_fruits = ["ябълки", "круши", "банани"]
Да предположим, че искате да следите броя на всеки елемент в списъка. Можеш използвайте цикъл for с диапазон() функционират по този начин.
брои = 0
за плод в диапазон (len (my_fruits)):
печат (брой, моите_плодове[брой])
брои += 1
Въпреки че това работи, то има няколко недостатъка:
- Трябва да следите броя извън цикъла.
- Трябва да увеличавате броя във всяка итерация.
- Трябва да изчислите дължината на цикъла.
- диапазон (len()) работи само с изброими, индексирани обекти.
Съществува по-добро решение: функцията enumerate().
Как enumerate() работи в Python
Питонът изброявам() функцията взема колекция от данни и връща обект за изброяване. Обектът enumerate съдържа брояч като ключ за всеки елемент, който обектът съдържа. В изброявам() функцията прави това, като присвоява брой на всеки елемент. Този брой съответства на броя итерации, които функцията е завършила, за да достигне тази стойност.
Този брояч улеснява достъпа до елементите в колекцията или дори мутира колекцията, където е възможно.
С изброявам(), не е нужно да следите дължината на цикъла или броя на повторенията. Можете също така да избегнете изричен достъп до стойността, като използвате оператора за индекс, напр плодове [брой]. Функцията за изброяване автоматично обработва всички тези функции.
Синтаксисът на Python enumerate()
По-долу е общият синтаксис за функцията enumerate().
изброяване (итерируем, start=0)
enumerate() приема два аргумента:
- iterable: колекция от данни или последователност, върху която Python може да итерира. напр. списък или кортеж.
- start: индексът, от който функцията enumerate трябва да започне да брои.
Как се изпълнява enumerate().
За да разберем как изброявам() работи, нека видим как всъщност се прилага.
дефизброявам(последователност, начало=0):
n = начало
за елемент в последователност:
добив n, елемент
n += 1
Тази функция, която можете да намерите в Документация за изброяване на Python, приема последователност и начален аргумент, който по подразбиране е 0.
След това функцията инициализира променливата n в началната променлива. Това проследява броя на повторенията.
В цикъла for, който следва за всеки елемент от последователността,
- добив поставя на пауза изпълнението на цикъла.
- Той също така връща текущия брой (n) и стойност (elem).
- Когато цикълът се възобнови, той увеличава n.
Връщаната стойност е обект на двойки ключ-стойност.
Ако трябваше да се обадите на изброявам() функция и й предайте списъка с плодове, това ще бъде изходната стойност.
my_fruits = ["ябълки", "круши", "банани"]
enumerate_object = изброяване (моите_плодове)
печат (списък (enumerate_object))
# изход - [(0, 'ябълки'), (1, 'круши'), (2, 'банани')]
Изброяване с различен начален индекс
В горния пример не посочихме началния индекс. Примерът по-долу ви показва как можете да зададете началния индекс на число по ваш избор.
За да започнете от 10, направете следното.
enumerate_object = изброяване (моите_плодове, 10)
печат (списък (enumerate_object))
# изход - [(10, 'ябълки'), (11, 'круши'), (12, 'банани')]
Примери за Python enumerate().
Ето няколко примера, показващи как можете да използвате изброявам() в Python.
Изброяване на Python низ
В този пример ще използвате enumerate, за да извлечете буквата с индекс 5:
my_string = "makeuseof"
за брой, стойност в изброяване (my_string):
ако брой == 5:
печат (стойност)
# изход - s
Избройте кортеж на Python
Можете също да използвате изброявам() да се повтори а Кортеж на Python. В този пример програмата отпечатва заглавка в първата итерация, преди да покаже елементите.
my_fruits_tuple = ("ябълки", "круши", "банани")
за индекс, стойност в изброяване (my_fruits_tuple):
ако (индекс == 0):
print("Плодове:")печат (стойност)
/*
плодове:
ябълки
круши
банани
*/
Избройте списък на Python
В примера по-долу използвате enumerate, за да намалите всички числа в списъка над 10 с 2.
my_number_list = [10, 17, 15, 6]
за индекс, стойност в изброяване (my_number_list):
ако (стойност > 10):
my_number_list[index] -= 2печат (my_number_list)
# изход - [10, 15, 13, 6]
Използвайте enumerate, за да преброите вашите итеративни елементи
Python включва изброявам() като вградена функция. Можете да го използвате за повторение и броене на елементи в итерируема колекция, като списък, кортеж или низ. Може да ви помогне да следите истинския индекс на всеки елемент, но можете също да посочите свой собствен начален индекс. Използвайте го като алтернатива на обхват() функция, ако работите с обекти, които не са преброими и индексирани обекти.