Как заменить range в питоне
Перейти к содержимому

Как заменить range в питоне

  • автор:

Заменить range на enumerate

enumerate и range
На Юнглинукс и в учебнике оттуда есть такой текст. Не могли бы Вы объяснить это более простым и.

Как изменить for in range на функцию enumerate
#!/usr/bin/env python3 # -*- coding: utf-8 -*- if __name__ == ‘__main__’: U = D = .

При вызове объекта Range, VBA самостоятельно меняет Range на rAnge
Всем доброго дня, у меня такой вопрос. По незнанию создал функцию rAnge(), теперь при вызове.

List,Enumerate
Всем ку!Не понимаю как обращаться к индексу в enumerate когда я разделаю текст\слово создал 2.

Перестаньте использовать range() в цикле for в Python

Python

Цикл for . Краеугольный камень программирования. Технологический приём, который вы осваиваете, ещё будучи новичком, и продолжаете использовать в течение всей своей карьеры программиста.

Если вы использовали другие популярные языка, например PHP или JavaScript, вы знакомы с использованием переменной для отслеживания текущего индекса.

Важно понимать, что эти циклы for фактически не выполняют итерацию по массиву. Они перебирают выражение, которое служит посредником для ссылки на каждое значение массива.

В примере выше i не имеет явного отношения к scores , просто оно совпадает с каждым необходимым значением индекса.

Старый (плохой) способ

В Python традиционный цикл for в показанном выше виде не существует. Однако, почему бы не адаптировать любимый способ под язык?

В результате быстро обнаруживается функция range() и получается подобный код:

Проблема с этим циклом for состоит в том, что он не очень в стиле Python. То есть мы не перебираем список, а используем i в качестве предварительного индекса.

На самом деле даже в JavaScript существуют методы прямого перебора массива ( forEach() и for…of ).

Использование функции enumerate()

Если вы хотите правильно отслеживать “значение индекса” в цикле for в Python, используйте функцию enumerate() , которая “считает” итерируемое. Её можно использовать для других типов данных: строк, кортежей и словарей.

Функция принимает два аргумента: итерируемое и необязательный аргумент начала отсчёта.

Если начало отсчёта не задано, по умолчанию оно будет 0 . Затем функция будет возвращать кортежи с текущим порядковым номером и соответствующим значением итерируемого.

Этот код намного чище! Мы избегаем работы со списками индексов, перебираем фактические значения и явно видим каждое значение в определении цикла for .

В качестве бонуса: обычно, если нужно напечатать нумерованный список, приходится добавлять i + 1 из-за того, что первый индекс 0 . Просто передайте значение 1 в enumerate() и наслаждайтесь магией!

Надеюсь, статья была вам полезна. Другие полезные рекомендации вы можете найти в моей статье 4 простых способа рефакторинга кода.

Питонистический подход к циклам for: range() и enumerate()

Автор заметки, перевод которой мы сегодня публикуем, хочет рассказать о некоторых особенностях использования циклов for в Python.

Цикл for — это один из краеугольных камней программирования. С этими циклами будущие программисты знакомятся в самом начале учёбы и, после первого знакомства, пользуются ими постоянно.

Если вы занялись разработкой на Python, имея опыт работы с другим популярным языком программирования, вроде PHP или JavaScript, то вам знакома методика применения переменной-счётчика, хранящей, например, индекс текущего элемента массива, обрабатываемого в цикле. Вот пример работы с циклом, написанный на JavaScript:

Работая с циклами for очень важно понимать то, что эти циклы не перебирают массивы. Они лишь дают программисту механизм для работы с переменной-счётчиком, которая используется для обращения к элементам обрабатываемых массивов.

В предыдущем примере переменная i не имеет какого-то явного отношения к массиву scores . Она всего лишь хранит некое число, которое увеличивается на 1 в каждой итерации цикла, и которое, как оказывается, подходит для последовательного обращения к элементам массива по их индексам.

Старый (неудачный) способ работы с массивами

В Python нет традиционных циклов for , подобных тому, что показан выше. Правда, если вы похожи на меня, то первым вашим желанием при освоении Python станет поиск способа создания цикла, с которым вам привычно и удобно работать.

В результате вы можете обнаружить функцию range() и написать на Python нечто подобное следующему:

Проблема этого цикла заключается в том, что он не очень хорошо соответствует идеологии Python. В нём мы не перебираем список, а, вместо этого, используем вспомогательную переменную i для обращения к элементам списка.

На самом деле, даже в JavaScript существуют методы, позволяющие перебирать массивы, так сказать, без посредников. Речь идёт о циклах forEach и for of .

Использование функции enumerate()

Если вам нужно адекватным образом отслеживать «индекс элемента» в for -цикле Python, то для этого может подойти функция enumerate() , которая позволяет «пересчитать» итерируемый объект. Её можно использовать не только для обработки списков, но и для работы с другими типами данных — со строками, кортежами, словарями.

Эта функция принимает два аргумента: итерируемый объект и необязательное начальное значение счётчика.

Если начальное значение счётчика enumerate() не передаётся — оно, по умолчанию, устанавливается в 0 . Функция создаёт объект, генерирующий кортежи, состоящие из индекса элемента и самого этого элемента.

Такой код получился гораздо чище кода из предыдущего примера. Мы ушли от работы со списком индексов, мы перебираем сами значения, получая к ним прямой доступ в цикле for, и видим значения, с которыми работаем, в объявлении цикла.

Вот одна приятная возможность, которая понравится тем, кому нужно выводить нумерованные списки так, чтобы номер первого элемента был бы не 0 , в соответствии с его индексом, а 1 . Обычно для того, чтобы это сделать, приходится менять выводимый номер элемента. Например — так: i + 1 . При использовании же функции enumerate() достаточно передать ей, в качестве второго аргумента, то число, с которого нужно начинать нумерацию. В нашем случае — 1 :

Итоги

Надеюсь, этот небольшой рассказ о циклах for в Python позволил вам узнать что-то новое об этом языке.

Уважаемые читатели! Знаете ли вы ещё какие-нибудь способы применения функции enumerate() ? Кажутся ли вам циклы, построенные с использованием enumerate() , более читабельными, чем циклы, созданные с использованием range(len()) ?

Alternate for range in python

If I have to generate natural numbers, I can use ‘range’ as follows:

Is there any way to achieve this without using range function or looping?

Flying Dutchmann's user avatar

4 Answers 4

You could use recursion to print first n natural numbers

Nihal Rp's user avatar

Based on Nihal’s solution, but returns a list instead:

Looping will be required in some form or another to generate a list of numbers, whether you do it yourself, use library functions, or use recursive methods.

If you’re not opposed to looping in principle (but just don’t want to implement it yourself), there are many practical and esoteric ways to do it (a number have been mentioned here already).

A similar question was posted here: How to fill a list. Although it has interesting solutions, they’re all still looping, or using range type functions.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *