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.