Risposte:
Usa range. In Python 2.x restituisce un elenco, quindi tutto ciò che serve è:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
In Python 3.x rangeè un iteratore. Quindi, è necessario convertirlo in un elenco:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
Nota : il secondo numero è esclusivo. Quindi, qui deve essere 16+1=17
MODIFICARE:
Per rispondere alla domanda sull'incremento di0.5 , l'opzione più semplice sarebbe probabilmente usare numpy arange() e .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]
stepparametro ma è comunque un int - non float. Non puoi farlo esattamente nella lib standard.
Sembra che tu stia cercando 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]
Per incrementare di 0.5invece di 1, dire:
>>> 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]
listcome variabile.
listè una classe integrata, quindi il suo utilizzo come variabile è un po 'scoraggiato
Provare:
range(x1,x2+1)
Questa è una lista in Python 2.x e si comporta principalmente come una lista in Python 3.x. Se stai eseguendo Python 3 e hai bisogno di un elenco che puoi modificare, usa:
list(range(x1,x2+1))
Se stai cercando una funzione come range che funzioni per il tipo float, allora ecco un ottimo articolo .
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))
Produzione:
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]
Usa la comprensione dell'elenco in Python. Dato che ne vuoi anche 16 nell'elenco ... Usa x2 + 1. La funzione di intervallo esclude il limite superiore nella funzione.
list = [x per x nell'intervallo (x1, x2 + 1)]
range()bisogno di usare una comprensione dell'elenco
list(range(x1, x2+1)).
In Python puoi farlo molto facilmente
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
oppure puoi creare una funzione ricorsiva che restituisce un array fino a un determinato numero:
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
output: ar = [10,9,8,7,6,5,4,3,2,1,0]
Il modo più elegante per farlo è usare la rangefunzione, tuttavia se vuoi ricreare questa logica puoi fare qualcosa del genere:
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)]
Questo produce l'output:
[10, 9, 8, 7, 6, 5, 4]
Come espresso prima da @Jared, il modo migliore è usare il rangeo numpy.arrangecomunque trovo il codice interessante da condividere.
[x for x in range(10, 3, 1)]- il primo argomento è l'inizio, il secondo la fine e l'ultimo il passo. ==> stop> start
Ogni risposta sopra presuppone che l'intervallo sia solo di numeri positivi. Ecco la soluzione per restituire un elenco di numeri consecutivi in cui gli argomenti possono essere qualsiasi (positivo o negativo), con la possibilità di impostare un valore di passaggio facoltativo (impostazione predefinita = 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
Ad esempio, il comando standard list(range(1,-3))restituisce un elenco vuoto [], mentre questa funzione restituisce[-3,-2,-1,0,1]
Aggiornato : ora il passaggio potrebbe essere negativo. Grazie @Michael per il suo commento.
i_min = -3, i_max = 1 any_number_range(i_max, i_min))restituito [-3,-2,-1,0,1] Ma, builtin list(range(i_min, i_max + 1))restituirà gli stessi valori.
list(range(1,-3, -1))