it-swarm.com.de

Python - Liste mit Zahlen zwischen 2 Werten erstellen?

Wie erstelle ich eine Liste mit Werten zwischen zwei von mir eingegebenen Werten? Beispielsweise wird die folgende Liste für Werte von 11 bis 16 generiert:

list = [11, 12, 13, 14, 15, 16]
284
lorde

Verwenden Sie range . In Python 2.x wird eine Liste zurückgegeben, sodass Sie nur 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 16+1 = 17 sein

BEARBEITEN:

Um auf die Frage nach dem Inkrementieren um 0.5 zu antworten, ist es wahrscheinlich am einfachsten, numpy 's arange zu verwenden.

>>> numpy.arange(11, 17, 0.5)
array([ 11. ,  11.5,  12. ,  12.5,  13. ,  13.5,  14. ,  14.5,  15. ,
        15.5,  16. ,  16.5])
504
Jared

Sie scheinen nach range() zu suchen:

>>> 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 anstelle von 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]
16
devnull

Versuchen:

range(x1,x2+1)  

Das ist eine Liste in Python 2.x und verhält sich meist 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))
5
Mike Housky

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]
4
Rajesh Surana

Verwenden Sie das Listenverständnis in Python. Da möchten Sie auch 16 in der Liste .. Verwenden Sie x2 + 1. Die Bereichsfunktion schließt die obere Grenze in der Funktion aus.

list = [x für x im Bereich (x1, x2 + 1)]

2

angenommen, Sie möchten einen Bereich zwischen x und y haben

range(x,y+1)

>>> range(11,17)
[11, 12, 13, 14, 15, 16]
>>>

verwendungsliste für 3.x Support

2
v2b

In python können Sie dies sehr einfach 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]

0
ashutosh pandey

Die eleganteste Art, dies zu tun, ist die Verwendung der Funktion range. 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, range oder numpy.arrange zu verwenden. Ich finde den Code jedoch interessant, ihn weiterzugeben.

0
Michael

Bei jeder Antwort wird davon ausgegangen, dass der Bereich nur positive Zahlen enthält. Hier ist die Lösung, um eine Liste von aufeinanderfolgenden Zahlen zurückzugeben, bei denen Argumente (positiv oder negativ) sein können, 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 list(range(1,-3)) eine leere Liste [] zurück, während diese Funktion [-3,-2,-1,0,1] zurückgibt.

Aktualisiert: jetzt kann der Schritt negativ sein. Danke @Michael für seinen Kommentar.

0
Denis Rasulev