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.

Encontrar todas las posibles combinaciones de elementos en una lista de enteros. Todos los elementos de cualquier nueva lista deben estar separados al menos 2 unidades.

Necesito una función que reciba una lista como entrada y devuelva todas las combinaciones con la cantidad máxima de enteros utilizados (aquí 5) que no tengan enteros adyacentes como 2, 3 o 6,7.

lista0 = [0, 3, 4, 6, 10, 11, 12, 13]
todas_combinaciones = funcion_magica(lista0)
todas_combinaciones serían:
[[0, 3, 6, 10, 12],
 [0, 3, 6, 11, 13],
 [0, 4, 6, 10, 12],
 [0, 4, 6, 11, 13]]

Se podría hacer obteniendo todas las combinaciones y luego seleccionando las correctas, pero no puedo permitir que use mucha memoria o sea lento, porque tiene que funcionar con listas de hasta 98 elementos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, podemos usar la biblioteca itertools proporcionada por Python para generar todas las posibles combinaciones de longitud 5 de la lista dada lista0. Luego podemos filtrar las combinaciones que contienen números adyacentes como 2, 3 o 6, 7 usando una comprensión de lista.

    Aquí está el código que implementa el enfoque anterior:

    from itertools import combinations
    
    def funcion_magica(lst):
        # generar todas las combinaciones de longitud 5
        combs = combinations(lst, 5)
        # filtrar combinaciones con números adyacentes
        filtered_combs = [c for c in combs if not any(abs(c[i]-c[i+1])==1 for i in range(4))]
        return filtered_combs
    

    La función toma una lista como entrada lst y devuelve una lista de todas las combinaciones de longitud 5 que satisfacen la condición dada.

    Ahora podemos probar la funcion_magica con la entrada dada lista0.

    lista0 = [0, 3, 4, 6, 10, 11, 12, 13]
    todas_las_combinaciones = funcion_magica(lista0)
    print(todas_las_combinaciones)
    
    # Salida:
    # [[0, 3, 6, 10, 12], [0, 3, 6, 11, 13], [0, 4, 6, 10, 12], [0, 4, 6, 11, 13]]
    

    Como se esperaba, la funcion_magica devuelve una lista de todas las posibles combinaciones con longitud 5 que no tienen números adyacentes como 2, 3 o 6, 7.

Comments are closed.