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.
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:
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 dadalista0
.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.