Respuestas:
Uso range
. En Python 2.x, devuelve una lista, por lo que todo lo que necesita es:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
En Python 3.x range
es un iterador. Por lo tanto, debe convertirlo en una lista:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
Nota : El segundo número es exclusivo. Entonces, aquí tiene que ser 16+1
=17
EDITAR:
Para responder a la pregunta sobre el incremento 0.5
, la opción más fácil probablemente sería usar numpy's arange()
y .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
parámetro, pero sigue siendo un int - no flotante. No puedes hacer eso exactamente en la lib estándar.
Pareces estar buscando 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]
Para incrementar en 0.5
lugar de 1
decir:
>>> 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
como variable.
list
es una clase integrada, por lo que se desaconseja su uso como variable
Tratar:
range(x1,x2+1)
Esa es una lista en Python 2.xy se comporta principalmente como una lista en Python 3.x. Si está ejecutando Python 3 y necesita una lista que pueda modificar, use:
list(range(x1,x2+1))
Si está buscando una función de rango que funcione para el tipo flotante, aquí hay un muy buen artículo .
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))
Salida:
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]
Usar la comprensión de la lista en python. Como también quieres 16 en la lista ... Usa x2 + 1. La función de rango excluye el límite superior de la función.
lista = [x para x en el rango (x1, x2 + 1)]
range()
no necesita usar una lista de comprensión
list(range(x1, x2+1))
.
En Python puedes hacer esto muy fácilmente
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
o puede crear una función recursiva que devuelva una matriz hasta un número dado:
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
salida: ar = [10,9,8,7,6,5,4,3,2,1,0]
La forma más elegante de hacer esto es mediante el uso de la range
función; sin embargo, si desea volver a crear esta lógica, puede hacer algo como esto:
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)]
Esto produce la salida:
[10, 9, 8, 7, 6, 5, 4]
Según lo expresado anteriormente por @Jared, la mejor manera es usar range
o, numpy.arrange
sin embargo, el código me parece interesante para compartir.
[x for x in range(10, 3, 1)]
: el primer argumento es el comienzo, el segundo el final y el último el paso. ==> stop> start
Cada respuesta anterior supone que el rango es solo de números positivos. Aquí está la solución para devolver la lista de números consecutivos donde los argumentos pueden ser cualquiera (positivo o negativo), con la posibilidad de establecer un valor de paso opcional (predeterminado = 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
Por ejemplo, el comando estándar list(range(1,-3))
devuelve una lista vacía []
, mientras que esta función devolverá[-3,-2,-1,0,1]
Actualizado : ahora el paso puede ser negativo. Gracias @Michael por su comentario.
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
retornos [-3,-2,-1,0,1]
Pero, el list(range(i_min, i_max + 1))
retorno devolverá los mismos valores.
list(range(1,-3, -1))