1018 Stimmen

Wie verwendet man einen dezimalen Bereich()-Schrittwert?

Gibt es eine Möglichkeit, zwischen 0 und 1 um 0,1 zu wechseln?

Ich dachte, ich könnte es wie folgt machen, aber es hat nicht geklappt:

for i in range(0, 1, 0.1):
    print(i)

Stattdessen heißt es, dass das Schrittargument nicht Null sein kann, was ich nicht erwartet hatte.

24voto

Catherine Ray Punkte 357

scipy hat eine eingebaute Funktion arange die Python's verallgemeinert range() Konstruktor, um Ihre Anforderung der Float-Behandlung zu erfüllen.

from scipy import arange

22voto

zeferino Punkte 480

Ähnlich wie R's seq Funktion gibt diese eine Folge in beliebiger Reihenfolge zurück, wenn der richtige Schrittwert angegeben wird. Der letzte Wert ist gleich dem Stoppwert.

def seq(start, stop, step=1):
    n = int(round((stop - start)/float(step)))
    if n > 1:
        return([start + step*i for i in range(n+1)])
    elif n == 1:
        return([start])
    else:
        return([])

Ergebnisse

seq(1, 5, 0.5)

[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]

seq(10, 0, -1)

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

seq(10, 0, -2)

[10, 8, 6, 4, 2, 0]

seq(1, 1)

[ 1 ]

17voto

Dana Punkte 30263

Die eingebaute Funktion range() gibt leider eine Folge von Ganzzahlwerten zurück, so dass Sie sie nicht für einen Dezimalschritt verwenden können.

Ich würde sagen, verwenden Sie einfach eine while-Schleife:

i = 0.0
while i <= 1.0:
    print i
    i += 0.1

Wenn Sie neugierig sind, wandelt Python Ihre 0,1 in 0 um, weshalb es Ihnen mitteilt, dass das Argument nicht Null sein kann.

15voto

Pramod Punkte 4990

Hier ist eine Lösung mit itertools :

import itertools

def seq(start, end, step):
    if step == 0:
        raise ValueError("step must not be 0")
    sample_count = int(abs(end - start) / step)
    return itertools.islice(itertools.count(start, step), sample_count)

Beispiel für die Verwendung:

for i in seq(0, 1, 0.1):
    print(i)

12voto

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

in Python 2.7x gibt Ihnen das Ergebnis von:

[0.0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6000000000000001, 0.7000000000000001, 0.8, 0.9]

aber wenn Sie verwenden:

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

gibt Ihnen das Gewünschte:

[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X