Imprime permutações específicas de uma lista em Python
Para todas as permutações de uma lista, desejo imprimir apenas aquelas em que o valor em um índice específico é maior do que os valores nos índices anteriores. Esse índice seria chamado de "ótimo índice", por exemplo: se a lista for [1,2,3], suas permutações são
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
Gostaria de imprimir apenas as permutações em que existam apenas n "grandes índices". Digamos n = 2, então a saída seria:
[1,3,2],[2,1,3] and [2,3,1]
Em [1,3,2], os índices 0 e 1 são ótimos índices porque 1 (no índice 0) não possui nenhum elemento anterior e 3 (no índice 1) é maior que seu elemento anterior, ou seja, 1. 2 (no índice 2) não é um "ótimo índice "porque não é maior que seu elemento anterior 3. Da mesma forma, In [2,1,3], os índices 0 e 2 são ótimos índices. Em [2,3,1], os índices 0 e 1 são ótimos índices. Estou usando a biblioteca de permutações em Python para gerar as permutações. Uma solução simples e fácil de entender seria apreciada.
Respostas
Isso deve 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)
Resultado:
[(1, 3, 2), (2, 1, 3), (2, 3, 1)]