Как мне использовать десятичное значение шага для range ()?
Как мне выполнить итерацию между 0 и 1 с шагом 0,1?
Это говорит о том, что аргумент step не может быть равен нулю:
for i inrange(0, 1, 0.1): print(i)
Переведено автоматически
Ответ 1
Вместо прямого использования десятичного шага гораздо безопаснее выразить это в терминах количества точек, которое вы хотите. В противном случае ошибка округления с плавающей запятой, скорее всего, даст вам неверный результат.
Используйте linspace функцию из библиотеки NumPy (которая не является частью стандартной библиотеки, но ее относительно легко получить). linspace возвращает количество точек, а также позволяет указать, включать ли правильную конечную точку:
Однако ошибка округления с плавающей запятой вызовет проблемы. Вот простой случай, когда ошибка округления приводит к тому, что arange получается массив длиной 4, когда он должен выдавать только 3 числа.:
range() может использовать только целые числа, не с плавающей запятой.
Вместо этого используйте понимание списка, чтобы получить список шагов:
[x * 0.1for x inrange(0, 10)]
В более общем плане понимание генератора сводит к минимуму выделение памяти:
xs = (x * 0.1for x inrange(0, 10)) for x in xs: print(x)
Ответ 3
Основываясь на 'xrange ([start], stop [, step])', вы можете определить генератор, который принимает и создает любой выбранный вами тип (придерживайтесь типов, поддерживающих + и <):
>>> defdrange(start, stop, step): ... r = start ... while r < stop: ... yield r ... r += step ... >>> i0=drange(0.0, 1.0, 0.1) >>> ["%g" % x for x in i0] ['0', '0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '1'] >>>
Ответ 4
Увеличьте величину i для цикла, а затем уменьшите ее, когда вам это нужно.
for i * 100inrange(0, 100, 10): print i / 100.0
РЕДАКТИРОВАТЬ: я, честно говоря, не могу вспомнить, почему я думал, что это будет работать синтаксически