Antworten:
Verwenden Sie range
. In Python 2.x wird eine Liste zurückgegeben, sodass Sie lediglich Folgendes benötigen:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
In Python 3.x range
ist ein Iterator. Sie müssen es also in eine Liste konvertieren:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
Hinweis : Die zweite Nummer ist exklusiv. Also, hier muss es sein 16+1
=17
BEARBEITEN:
Um auf die Frage nach dem Inkrementieren um zu antworten, ist 0.5
es wahrscheinlich am einfachsten, numpys arange()
und .tolist()
:
>>> import numpy as np
>>> np.arange(11, 17, 0.5).tolist()
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5,
14.0, 14.5, 15.0, 15.5, 16.0, 16.5]
step
Parameter um mehr als 1 erhöhen, aber das ist immer noch ein int - nicht float. Sie können das nicht genau in der Standardbibliothek tun.
Sie scheinen zu suchen range()
:
>>> x1=11
>>> x2=16
>>> range(x1, x2+1)
[11, 12, 13, 14, 15, 16]
>>> list1 = range(x1, x2+1)
>>> list1
[11, 12, 13, 14, 15, 16]
Zum Inkrementieren um 0.5
statt 1
sagen Sie:
>>> list2 = [x*0.5 for x in range(2*x1, 2*x2+1)]
>>> list2
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]
list
als Variable.
list
ist eine eingebaute Klasse, so dass seine Verwendung als Variable etwas entmutigt wird
Versuchen:
range(x1,x2+1)
Das ist eine Liste in Python 2.x und verhält sich meistens wie eine Liste in Python 3.x. Wenn Sie Python 3 ausführen und eine Liste benötigen, die Sie ändern können, verwenden Sie:
list(range(x1,x2+1))
Wenn Sie nach einer bereichsähnlichen Funktion suchen, die für den Float-Typ funktioniert, dann ist hier ein sehr guter Artikel .
def frange(start, stop, step=1.0):
''' "range()" like function which accept float type'''
i = start
while i < stop:
yield i
i += step
# Generate one element at a time.
# Preferred when you don't need all generated elements at the same time.
# This will save memory.
for i in frange(1.0, 2.0, 0.5):
print i # Use generated element.
# Generate all elements at once.
# Preferred when generated list ought to be small.
print list(frange(1.0, 10.0, 0.5))
Ausgabe:
1.0
1.5
[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5]
Verwenden Sie das Listenverständnis in Python. Da du auch 16 in der Liste haben willst .. Verwende x2 + 1. Die Bereichsfunktion schließt die Obergrenze in der Funktion aus.
list = [x für x im Bereich (x1, x2 + 1)]
range()
keine Notwendigkeit verwenden, ein Listenverständnis zu verwenden
list(range(x1, x2+1))
.
In Python können Sie dies sehr schnell tun
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
oder Sie können eine rekursive Funktion erstellen, die ein Array bis zu einer bestimmten Zahl zurückgibt:
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
Ausgabe: ar = [10,9,8,7,6,5,4,3,2,1,0]
Der eleganteste Weg, dies zu tun, ist die Verwendung der range
Funktion. Wenn Sie diese Logik jedoch neu erstellen möchten, können Sie Folgendes tun:
def custom_range(*args):
s = slice(*args)
start, stop, step = s.start, s.stop, s.step
if 0 == step:
raise ValueError("range() arg 3 must not be zero")
i = start
while i < stop if step > 0 else i > stop:
yield i
i += step
>>> [x for x in custom_range(10, 3, -1)]
Dies erzeugt die Ausgabe:
[10, 9, 8, 7, 6, 5, 4]
Wie bereits von @Jared erwähnt, ist es am besten , den Code zu verwenden, range
oder numpy.arrange
ich finde den Code interessant, um ihn zu teilen.
[x for x in range(10, 3, 1)]
- das erste Argument ist der Anfang, das zweite das Ende und das letzte der Schritt. ==> Stop> Start
Bei jeder obigen Antwort wird davon ausgegangen, dass der Bereich nur aus positiven Zahlen besteht. Hier ist die Lösung, um eine Liste von fortlaufenden Zahlen zurückzugeben, bei denen Argumente beliebig sein können (positiv oder negativ), mit der Möglichkeit, einen optionalen Schrittwert festzulegen (Standard = 1).
def any_number_range(a,b,s=1):
""" Generate consecutive values list between two numbers with optional step (default=1)."""
if (a == b):
return a
else:
mx = max(a,b)
mn = min(a,b)
result = []
# inclusive upper limit. If not needed, delete '+1' in the line below
while(mn < mx + 1):
# if step is positive we go from min to max
if s > 0:
result.append(mn)
mn += s
# if step is negative we go from max to min
if s < 0:
result.append(mx)
mx += s
return result
Beispielsweise gibt der Standardbefehl eine list(range(1,-3))
leere Liste zurück []
, während diese Funktion zurückgegeben wird[-3,-2,-1,0,1]
Aktualisiert : Jetzt kann der Schritt negativ sein. Danke @Michael für seinen Kommentar.
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
zurückgegeben [-3,-2,-1,0,1]
wird. Eingebaute Funktionen geben list(range(i_min, i_max + 1))
jedoch dieselben Werte zurück.
list(range(1,-3, -1))