Todas las combinaciones para una lista de objetos

Requisito previo: Python Itertools

Hay varias formas de obtener todas las combinaciones para una lista de objetos en python. Este problema ya tiene solución recursiva . Python tiene un módulo itertools que proporciona dos funciones llamadas combinaciones()y combinaciones_con_reemplazo()que facilitan mucho nuestro trabajo. A continuación se muestran los dos métodos:

1. Usando itertools.combinations():

Sintaxis: itertools.combination(iterable, r)  

Donde r es la longitud de las tuplas de salida.

Esta función devuelve subsecuencias (tuplas) de longitud r desde la entrada iterable. Toma una lista de objetos y la longitud de las tuplas(r) de salida como entrada. Pero hay algunas cosas a tener en cuenta sobre esta función como:

  • Las tuplas de combinación se emiten en orden lexicográfico. Entonces, si la entrada iterable está en orden, la salida combinada también se producirá en orden.
  • Los elementos se tratan como únicos en función de sus posiciones, no de sus valores. Entonces, si los elementos de entrada consisten en valores duplicados, habrá valores duplicados en la salida.
  • ¡ El número de artículos devueltos es nCr = n! / (r! * (nr)!) cuando 0 <= r <= n; y cero cuando r > n.

Todas las combinaciones sin reemplazo

A continuación se muestra la implementación:

Python3

# code
from itertools import combinations
  
# m = list of objects.
# same method can be applied 
# for list of integers.
m = ['GFG', 'GeeksforGeeks', 'Geeks']
# display
for i in range(len(m)):
  print(list(combinations(m, i+1)))

Producción:

[('GFG',), ('GeeksforGeeks',), ('Geeks',)]
[('GFG', 'GeeksforGeeks'), ('GFG', 'Geeks'), ('GeeksforGeeks', 'Geeks')]
[('GFG', 'GeeksforGeeks', 'Geeks')]

Si la entrada tiene elementos duplicados:

Python3

# code
from itertools import combinations
  
# m = list of objects.
# 1st and 3rd elements are same. 
# same method can be applied 
# for list of integers.
m = ['GFG', 'GeeksforGeeks', 'GFG']
  
# output : list of combinations.
for i in range(len(m)):
  print(list(combinations(m, i+1)))

Producción:

[('GFG',), ('GeeksforGeeks',), ('GFG',)]
[('GFG', 'GeeksforGeeks'), ('GFG', 'GFG'), ('GeeksforGeeks', 'GFG')]
[('GFG', 'GeeksforGeeks', 'GFG')]

2. Usando itertools.combinations_with_replacement():

Sintaxis: itertools.combination_with_replacement(iterable, r) 

 Donde r es la longitud de las tuplas de salida.

Esta función funciona igual que itertools.combinations(). Pero esta función devuelve subsecuencias de r longitud que incluyen elementos individuales repetidos más de una vez. También hay algunos puntos a tener en cuenta:

  • Las tuplas de combinación se emiten en orden lexicográfico. Entonces, si la entrada iterable está en orden, la salida combinada también se producirá en orden.
  • Los elementos se tratan como únicos en función de sus posiciones, no de sus valores. Entonces, si los elementos de entrada consisten en valores duplicados, habrá valores duplicados en la salida.
  • ¡ El número de artículos devueltos es (n+r-1)! / r! / (n-1)! cuando n > 0.

Combinaciones con reemplazo.

A continuación se muestra la implementación:

Python3

# code
from itertools import combinations_with_replacement
  
# m = list of objects.
# same method can be applied 
# for list of integers.
m = ['GFG', 'GeeksforGeeks', 'Geeks']
  
# output : list of combinations.
for i in range(len(m)):
  print(list(combinations_with_replacement(m, i+1)))

Producción:

[(‘GFG’,), (‘GeeksforGeeks’,), (‘Geeks’,)]
[(‘GFG’, ‘GFG’), (‘GFG’, ‘GeeksforGeeks’), (‘GFG’, ‘Geeks ‘), (‘GeeksforGeeks’, ‘GeeksforGeeks’), (‘GeeksforGeeks’, ‘Geeks’), (‘Geeks’, ‘Geeks’)]
[(‘GFG’, ‘GFG’, ‘GFG’), (‘ GFG’, ‘GFG’, ‘GeeksforGeeks’), (‘GFG’, ‘GFG’, ‘Geeks’), (‘GFG’, ‘GeeksforGeeks’, ‘GeeksforGeeks’), (‘GFG’, ‘GeeksforGeeks’, ‘ Geeks’), (‘GFG’, ‘Geeks’, ‘Geeks’), (‘GeeksforGeeks’, ‘GeeksforGeeks’, ‘GeeksforGeeks’), (‘GeeksforGeeks’, ‘GeeksforGeeks’, ‘Geeks’), (‘GeeksforGeeks’ , ‘Geeks’, ‘Geeks’), (‘Geeks’, ‘Geeks’, ‘Geeks’)]

Publicación traducida automáticamente

Artículo escrito por tenacious39 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 *