Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/10/2015, 13:02
Koan
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 14 años, 4 meses
Puntos: 9
Respuesta: Operaciones con funciones all y any

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 original
  1. from itertools import combinations
  2.  
  3. matriz = ([1,2,3], [4,5,6], [7,8,9],[1,10,11])
  4. for x in combinations(matriz, 2):
  5.     print(x)

Este script devuelve:

Código Python:
Ver original
  1. ([1, 2, 3], [4, 5, 6])
  2. ([1, 2, 3], [7, 8, 9])
  3. ([1, 2, 3], [1, 10, 11]) # Este vector no debe aparecer
  4. ([4, 5, 6], [7, 8, 9])
  5. ([4, 5, 6], [1, 10, 11])
  6. ([7, 8, 9], [1, 10, 11])

Pero yo quiero que devuelva:

Código Python:
Ver original
  1. ([1, 2, 3], [4, 5, 6])
  2. ([1, 2, 3], [7, 8, 9])
  3. ([4, 5, 6], [7, 8, 9])
  4. ([4, 5, 6], [1, 10, 11])
  5. ([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 original
  1. matriz = ([1,2,3], [4,5,6], [7,8,9],[1,10,11])
  2.  
  3. for vector in combinations(matriz, 2):
  4.     for i in vector[0]:
  5.         if i in vector[1]:
  6.             break
  7.     else:
  8.         print(vector)

Resultado:

Código Python:
Ver original
  1. ([1, 2, 3], [4, 5, 6])
  2. ([1, 2, 3], [7, 8, 9])
  3. ([4, 5, 6], [7, 8, 9])
  4. ([4, 5, 6], [1, 10, 11])
  5. ([7, 8, 9], [1, 10, 11])

Como se puede observar no sale la pareja combinada:

Código Python:
Ver original
  1. ([1, 2, 3], [1, 10, 11])

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.

Última edición por Koan; 16/10/2015 a las 13:50