Combinaciones únicas de un conjunto con duplicados.
En Python, cuando escribo:
L = [2,2,3]
list(itertools.combinations(L, 2))
Obtengo esto:
[(2, 2), (2, 3), (2, 3)]
Quiero obtener solo esto:
[(2, 2), (2, 3)]
Es decir, cada combinación debe aparecer una sola vez, aunque la lista original contenga dos 2.
¿Qué forma eficiente hay de obtener cada subconjunto de L (de tamaño 2) solo una vez?
Lo que intenté:
list(itertools.combinations(set(L), 2))
Solo devuelve:
[(2, 3)]
Esto no es bueno, ya que quiero obtener el (2,2) también, ya que es un subconjunto de L.
list(itertools.combinations_with_replacement(set(L), 2))
Devuelve:
[(2, 2), (2, 3), (3, 3)]
Esto no es bueno, ya que no necesito el (3,3), ya que no es un subconjunto de L.
davy.ai
Solución:
Una manera eficiente de obtener cada subconjunto de L (de tamaño 2) solo una vez es primero eliminar los duplicados de la lista L y luego aplicar la función itertools.combinations. Así es como:
Esto dará el resultado deseado:
En este enfoque, primero creamos una nueva lista unique_L a partir de L que solo contiene elementos únicos. Luego aplicamos la función itertools.combinations en unique_L para obtener todas las combinaciones de tamaño 2. Debido a que unique_L no contiene duplicados, cada combinación aparece solo una vez en el resultado final.
¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional.