Cetak Permutasi tertentu dari daftar dengan Python

Sep 28 2020

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

1 IoaTzimas Sep 27 2020 at 23:38

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)]