Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menjana Pilihatur dengan Nilai Unik, Mengelakkan Pendua?
Menjana Pilihatur dengan Nilai Unik
Permutasi yang dijana menggunakan fungsi itertools.permutations() menganggap elemen sebagai unik berdasarkan kedudukan, bukan nilai. Akibatnya, ia boleh menghasilkan pendua yang berbeza hanya dalam susunan elemen dengan nilai yang sama.
Penyelesaian
Untuk mengelakkan pendua, pertimbangkan untuk menggunakan pendekatan berikut:
def unique_permutations(elements): """Generate permutations with unique values.""" elements = sorted(elements) result = [] counts = {} prev_element = None for element in elements: if element != prev_element: counts[element] = 1 else: counts[element] += 1 result.extend(combine(element, counts)) prev_element = element return result def combine(element, counts): """Combine element with unique counts to form permutations.""" permutations = [] if sum(counts.values()) == 1: return [tuple([element])] for other_element, count in counts.items(): if element == other_element: count -= 1 permutations.extend([*tuple([element]), *sublist] for sublist in combine(other_element, count)) return permutations
Contoh
>>> list(unique_permutations([1, 1, 2])) [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
Atas ialah kandungan terperinci Bagaimana untuk Menjana Pilihatur dengan Nilai Unik, Mengelakkan Pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!