Dada una lista. La tarea es escribir un programa en Python para obtener todas las combinaciones por pares de la lista.
Encontrar todos los pares (sin unicidad)
Ejemplo:
Entrada: [1, «Mallika», 2, «Yash»]
Salida: [(1, ‘Mallika’), (1, 2), (1, ‘Yash’), (‘Mallika’, 1), (‘Mallika’, 2), (‘Mallika’, ‘Yash’) , (2, 1), (2, ‘Mallika’), (2, ‘Yash’), (‘Yash’, 1), (‘Yash’, ‘Mallika’), (‘Yash’, 2)]
Método 1: usar bucles simples
Podemos acceder a todas las combinaciones de la lista usando dos bucles para iterar sobre los índices de la lista. Si ambos contadores de índice están en el mismo valor de índice, lo omitimos; de lo contrario, imprimimos el elemento en el índice i seguido del elemento en el índice j en orden.
La complejidad temporal de este método es O(n 2 ) ya que necesitamos dos bucles para iterar sobre las listas.
Python3
# declaring a list lst = [1,"Mallika",2,"Yash"] # output output = [] # looping over list for i in range(0,len(lst)): for j in range(0,len(lst)): # checking if i and j indexes are not on same element if (i!=j): # add to output output.append((lst[i],lst[j])) # view output print(output)
Producción:
[(1, ‘Mallika’), (1, 2), (1, ‘Yash’), (‘Mallika’, 1), (‘Mallika’, 2), (‘Mallika’, ‘Yash’), ( 2, 1), (2, ‘Mallika’), (2, ‘Yash’), (‘Yash’, 1), (‘Yash’, ‘Mallika’), (‘Yash’, 2)]
Método 2: Usar itertools
Python proporciona compatibilidad con la biblioteca estándar de itertools que se utiliza para crear iteradores para un bucle eficiente. La biblioteca brinda soporte para varios tipos de iteraciones, en grupos, orden ordenado, etc. Las funciones de permutaciones() de esta biblioteca se utilizan para obtener todos los ordenamientos posibles de la lista de elementos, sin repeticiones. Las funciones de permutaciones() tienen la siguiente sintaxis:
itertools.permutations(lst,r)
Donde r representa las tuplas de longitud r, es decir, 2 representa un par, 3 representa un triplete. El primer argumento es la lista especificada.
La función devuelve la lista de grupos de elementos devueltos después de formar las permutaciones. La salida contiene nx (n-1) número de elementos, donde n es el tamaño de la lista ya que cada elemento se multiplica posteriormente con todos los demás. El tiempo necesario para calcular las permutaciones es aproximadamente exponencial en el orden del tamaño de la lista.
Python3
# importing required library import itertools # creating a list of elements belonging to integers and strings lst = [1, "Mallika", 2, "Yash"] # simulating permutations of the list in a group of 2 pair_order_list = itertools.permutations(lst, 2) # printing the elements belonging to permutations print(list(pair_order_list))
Producción:
[(1, ‘Mallika’), (1, 2), (1, ‘Yash’), (‘Mallika’, 1), (‘Mallika’, 2), (‘Mallika’, ‘Yash’), ( 2, 1), (2, ‘Mallika’), (2, ‘Yash’), (‘Yash’, 1), (‘Yash’, ‘Mallika’), (‘Yash’, 2)]
Nota:
- Los pares se imprimen en el orden de la secuencia de llegada de los elementos en la lista.
- En el caso de todos los mismos elementos, el método continúa formando pares y devolviéndolos, incluso si son duplicados.
Python3
# importing required library import itertools # declaring a list lst = [2,2,2] # creating a list of pairs of the list ordered_list = itertools.permutations(lst,2) # looping over the elements belonging to the # pair of permutations for i in ordered_list: # printing ith element print(i)
Salida :
(2, 2) (2, 2) (2, 2) (2, 2) (2, 2) (2, 2)
Encontrar todos los pares únicos (unicidad)
Sin embargo, el método de las permutaciones no distingue entre los pares (a, b) y (b, a) y los devuelve a ambos. La biblioteca de itertools también admite un método de combinaciones() que imprime cualquiera de los pares (a, b) o (b, a) y no ambos. ¡El número de elementos de salida es equivalente a (n-1)! donde n es la longitud de la lista. El tiempo requerido para calcular combinaciones es aproximadamente polinomial.
Ejemplo:
Entrada: [1, «Mallika», 2, «Yash»]
Salida: [(1, ‘Mallika’), (1, 2), (1, ‘Yash’), (‘Mallika’, 2), (‘Mallika’, ‘Yash’), (2, ‘Yash’) ]
Python3
# importing required library import itertools # creating a list of elements belonging 3 to integers and strings lst = [1,"Mallika",2,"Yash"] # simulating permutations of the list in # a group of 2 pair_order_list = itertools.combinations(lst,2) # printing the elements belonging to permutations print (list(pair_order_list))
Producción:
[(1, ‘Mallika’), (1, 2), (1, ‘Yash’), (‘Mallika’, 2), (‘Mallika’, ‘Yash’), (2, ‘Yash’)]