一意の値による順列の生成
itertools.permutations() 関数を使用して生成された順列は、要素を値ではなく位置に基づいて一意として扱います。その結果、同じ値を持つ要素の順序のみが異なる重複が生成される可能性があります。
解決策
重複を回避するには、次のアプローチの使用を検討してください。
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
例
>>> list(unique_permutations([1, 1, 2])) [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
以上が重複を避けて一意の値を持つ順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。