es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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 funciones max y min para determinar los valores de inicio y fin.

    Aquí tienes un ejemplo de código:

    inicio = min(a, b)
    fin = max(a, b) + 1
    range(inicio, fin)
    

    Esto devolverá la misma salida que el código anterior, pero es mucho más fácil de leer y entender:

    [4, 5, 6, 7]
    [7, 6, 5, 4]
    

    Ten en cuenta que agregamos 1 al valor max(a, b) para asegurarnos de que el valor de fin esté incluido en el rango.

Comments are closed.