Cetak Permutasi tertentu dari daftar dengan Python
Untuk semua permutasi daftar, saya hanya ingin mencetak permutasi tersebut di mana nilai pada indeks tertentu lebih besar daripada nilai pada indeks sebelumnya. Indeks seperti itu akan disebut "indeks besar" mis: Jika daftarnya adalah [1,2,3], permutasinya adalah
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
Saya ingin mencetak hanya permutasi seperti itu yang hanya ada n "indeks bagus". Misalkan n = 2, maka outputnya adalah:
[1,3,2],[2,1,3] and [2,3,1]
Pada [1,3,2]indeks 0 dan 1 adalah indeks yang bagus karena 1 (pada indeks 0) tidak memiliki elemen sebelumnya dan 3 (pada indeks 1) lebih besar dari elemen sebelumnya yaitu 1. 2 (pada indeks 2) bukan merupakan "indeks besar "karena tidak lebih besar dari elemen sebelumnya 3. Demikian pula, In [2,1,3], indeks 0 dan 2 adalah indeks yang bagus. Dalam [2,3,1], indeks 0 dan 1 adalah indeks yang bagus. Saya menggunakan perpustakaan permutasi dengan Python untuk menghasilkan permutasi. Solusi yang sederhana dan mudah dipahami akan sangat dihargai.
Jawaban
Ini harus bekerja:
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)
Keluaran:
[(1, 3, 2), (2, 1, 3), (2, 3, 1)]