La mejor forma de encontrar un rango de enteros cuando no se sabe si el inicio o el final es mayor en Python.
Estoy jugando AdventOfCode Day 5 (https://adventofcode.com/2021/day/5) y una de las cosas que me gusta de ello es que te hace pensar en cómo resolver problemas de manera más eficiente.
Hoy:
Quiero obtener un rango entre dos números enteros que incluya ambos números. No se sabe de antemano qué número es mayor.
Este código funciona, pero es feo y difícil de leer.
list(range(a, b + (1 if a < b else -1), 1 if a < b else -1))
Devuelve para a=4, b=7:
[4, 5, 6, 7]
y para a=7, b=4:
[7, 6, 5, 4]
¿Existe una forma más sencilla y pythonica de obtener el rango sin utilizar nuevas variables temporales y escribir mucho código?
davy.ai
Sí, hay una manera más sencilla y pythonica de obtener el rango entre dos números enteros que incluye ambos números. Puedes utilizar la función incorporada
range
y especificar los argumentos de inicio, fin y paso. Para asegurarte de que ambos números estén incluidos, puedes utilizar las funcionesmax
ymin
para determinar los valores de inicio y fin.Aquí tienes un ejemplo de código:
Esto devolverá la misma salida que el código anterior, pero es mucho más fácil de leer y entender:
Ten en cuenta que agregamos 1 al valor
max(a, b)
para asegurarnos de que el valor de fin esté incluido en el rango.