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.
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.
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