Вопрос-Ответ

How do I use a decimal step value for range()?

Как мне использовать десятичное значение шага для range ()?

Как мне выполнить итерацию между 0 и 1 с шагом 0,1?

Это говорит о том, что аргумент step не может быть равен нулю:

for i in range(0, 1, 0.1):
print(i)
Переведено автоматически
Ответ 1

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

Используйте linspace функцию из библиотеки NumPy (которая не является частью стандартной библиотеки, но ее относительно легко получить). linspace возвращает количество точек, а также позволяет указать, включать ли правильную конечную точку:

>>> np.linspace(0,1,11)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
>>> np.linspace(0,1,10,endpoint=False)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

Если вы действительно хотите использовать значение шага с плавающей запятой, используйте numpy.arange:

>>> import numpy as np
>>> np.arange(0.0, 1.0, 0.1)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

Однако ошибка округления с плавающей запятой вызовет проблемы. Вот простой случай, когда ошибка округления приводит к тому, что arange получается массив длиной 4, когда он должен выдавать только 3 числа.:

>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])
Ответ 2

range() может использовать только целые числа, не с плавающей запятой.

Вместо этого используйте понимание списка, чтобы получить список шагов:

[x * 0.1 for x in range(0, 10)]

В более общем плане понимание генератора сводит к минимуму выделение памяти:

xs = (x * 0.1 for x in range(0, 10))
for x in xs:
print(x)
Ответ 3

Основываясь на 'xrange ([start], stop [, step])', вы можете определить генератор, который принимает и создает любой выбранный вами тип (придерживайтесь типов, поддерживающих + и <):

>>> def drange(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 * 100 in range(0, 100, 10):
print i / 100.0

РЕДАКТИРОВАТЬ: я, честно говоря, не могу вспомнить, почему я думал, что это будет работать синтаксически

for i in range(0, 11, 1):
print i / 10.0

Это должно привести к желаемому результату.

python