Si, tienes razon. Aunque al principio son una tentacion usar 'any' y 'all' (sobre todo para cosas simples), como queramos poner muchas condiciones se lia un poco el codigo. No sabe uno si va arrojar True o False.
Trato de hacer eso:
Imagina 4 vectores que se han de combinar entre si (de dos vectores en dos) sin repetir numero entre ellos:
Código Python:
Ver originalfrom itertools import combinations
matriz = ([1,2,3], [4,5,6], [7,8,9],[1,10,11])
for x in combinations(matriz, 2):
print(x)
Este script devuelve:
Código Python:
Ver original([1, 2, 3], [4, 5, 6])
([1, 2, 3], [7, 8, 9])
([1, 2, 3], [1, 10, 11]) # Este vector no debe aparecer
([4, 5, 6], [7, 8, 9])
([4, 5, 6], [1, 10, 11])
([7, 8, 9], [1, 10, 11])
Pero yo quiero que devuelva:
Código Python:
Ver original([1, 2, 3], [4, 5, 6])
([1, 2, 3], [7, 8, 9])
([4, 5, 6], [7, 8, 9])
([4, 5, 6], [1, 10, 11])
([7, 8, 9], [1, 10, 11])
Ya que:
([1, 2, 3], [1, 10, 11])
Repite el numero 1 entre ambos vectores.
Probare con bucles for y listas por compresion como dices. Mañana posteo algo. Gracias!
EDITO:
Bueno, he ido un poco mas rapido. He utilizado la clausula
else en un for (todavia no he usado la lista por compresion):
Código Python:
Ver originalmatriz = ([1,2,3], [4,5,6], [7,8,9],[1,10,11])
for vector in combinations(matriz, 2):
for i in vector[0]:
if i in vector[1]:
break
else:
print(vector)
Resultado:
Código Python:
Ver original([1, 2, 3], [4, 5, 6])
([1, 2, 3], [7, 8, 9])
([4, 5, 6], [7, 8, 9])
([4, 5, 6], [1, 10, 11])
([7, 8, 9], [1, 10, 11])
Como se puede observar no sale la pareja combinada:
Ya que se repite en ambos vectores el numero 1. Supongo que habra miles de maneras de hacerlo. Y claro, no se si es necesario usar las funciones 'any' o 'all' en este caso.