Saltar al contenido

¿Producto cartesiano y condiciones de Python?

La guía o código que encontrarás en este post es la solución más fácil y válida que encontramos a tu duda o problema.

Solución:

Pitón 3

En Python 3 puede filtrar combinaciones no deseadas usando itertools.filterfalse:

# predicate is true when need to skip the combination
predicate = (lambda (a1, a2, b1, b2): a1 <= a2 and (b1 != 0 or b2 == 5), params)
filtered_params = itertools.filterfalse(predicate, params)

Pitón 2

Puede utilizar la lista de comprensión o itertools.ifilter:

filtered_params = itertools.ifilter
    (lambda (a1, a2, b1, b2): a1 <= a2 and (b1 != 0 or b2 == 5), params)

Tenga en cuenta que ambas versiones hacen un bucle y se filtran debajo del capó. Si desea evitar eso, deberá construir un algoritmo mejorado que cree las tuplas sin los indeseables.

Si tiene muchos parámetros, puede ser más fácil trabajar con un enfoque basado en restricciones usando un módulo como python-constraint; deje que haga el trabajo duro de averiguar qué combinaciones son válidas.

Esto se vería algo así

from constraint import Problem

prob = Problem()
prob.addVariables(["a1", "a2"], range(10,41,2))
prob.addVariable("b1", [0, 2])
prob.addVariable("b2", range(5, 31, 5))
prob.addConstraint(lambda a1, a2: a2 <= a1, ["a1", "a2"])
prob.addConstraint(lambda b1, b2: b1 != 0 or b2 == 5, ["b1", "b2"])

for params in prob.getSolutionIter():
    run_sim(**params)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *