Imprimir permutaciones específicas de una lista en Python
Para todas las permutaciones de una lista, quiero imprimir solo aquellas permutaciones en las que el valor en un índice particular es mayor que los valores en índices anteriores. Tal índice se llamaría un "índice excelente", por ejemplo: si la lista es [1,2,3], sus permutaciones son
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
Me gustaría imprimir solo las permutaciones en las que solo hay n "índices geniales". Digamos que n = 2, entonces la salida sería:
[1,3,2],[2,1,3] and [2,3,1]
En [1,3,2], los índices 0 y 1 son excelentes índices porque 1 (en el índice 0) no tiene ningún elemento anterior y 3 (en el índice 1) es mayor que su elemento anterior, es decir, 1. 2 (en el índice 2) no es un "gran índice "porque no es mayor que su elemento anterior 3. De manera similar [2,1,3], los índices 0 y 2 de In son excelentes índices". En [2,3,1], los índices 0 y 1 son excelentes índices. Estoy usando la biblioteca de permutaciones en Python para generar las permutaciones. Se agradecería una solución simple y fácil de entender.
Respuestas
Esto debería funcionar:
import itertools
def great(l, n): #function that counts the permutations of list l with n great indices
def count_of_great(k): #function that counts the great indices of list k
c=1 #because first element is always great
for i in range(1,len(k)):
if k[i]>max(k[:i]): #if the value is greater than all previous values we increase c
c+=1
return c #this is the count of great indices in k
return [p for p in itertools.permutations(l) if count_of_great(p)==n] #this is a list of permutations of l that have a count_of_great eual with n
great([1,2,3], 2)
Salida:
[(1, 3, 2), (2, 1, 3), (2, 3, 1)]