首頁 >後端開發 >Python教學 >如何有效地產生多重集的唯一排列?

如何有效地產生多重集的唯一排列?

Linda Hamilton
Linda Hamilton原創
2024-12-13 10:53:12773瀏覽

How Can I Efficiently Generate Unique Permutations of a Multiset?

計算唯一排列

Itertools 的排列函數根據元素的位置(而不是值)將元素視為唯一。因此,可能會出現重複項,例如提供的例子:[(1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1 , 1 , 1), (1, 1, 1)]。

避免重複

最初的請求是為了避免這些重複的演算法,由於涉及大量排列而無需訴諸後過濾。

sympy 中的多重排列

對於這種情況,sympy 提供了 multiset_permutations 迭代器。與排列不同,此迭代器根據元素的值而不是位置將元素視為唯一。

考慮以下範例:

>>> from sympy.utilities.iterables import multiset_permutations
>>> list(multiset_permutations([1,1,1]))
[[1, 1, 1]]
>>> list(multiset_permutations([1,1,2]))
[[1, 1, 2], [1, 2, 1], [2, 1, 1]]

如您所見,multiset_permutations 僅產生唯一的排列。

以上是如何有效地產生多重集的唯一排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn