고유한 값으로 순열 생성
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!