Programa de Python para obtener todas las combinaciones por pares de una lista

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’)]

Publicación traducida automáticamente

Artículo escrito por yippeee25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *