Czy istnieje sposób na krok od 0 do 1 o 0,1?
Myślałem, że mogę to zrobić w następujący sposób, ale się nie udało:
for i in range(0, 1, 0.1):
print i
Zamiast tego mówi, że argument kroku nie może wynosić zero, czego się nie spodziewałem.
itertools.takewhile
i itertools.count
. Nie jest to jednak lepsze niż drange
wydajność.
seq
narzędzie w jądrach GNU pozwala obejść się seq 0 0.1 1
bez błędów zaokrąglania!
seq
używa C long double
typu wewnętrznego i są podatne na błędy zaokrągleń. Na przykład na mojej maszynie seq 0 0.1 1
daje 1
jako ostatnie wyjście (zgodnie z oczekiwaniami), ale seq 1 0.1 2
daje 1.9
jako ostatnie wyjście (zamiast oczekiwanych 2
).
itertools.takewhile(lambda x: (x+0.05)<1, itertools.count(0,0.1))
lub itertools.islice(itertools.count(0,0.1), 10)
(jeśli masz import itertools
), chociaż nie przetestowałem, która jest bardziej wydajna