[英]Python: Generate All Permutations Subject to Condition
我正在嘗試生成列表的所有排列,但要遵守沒有旋轉重復項的約束。 因此,如果我對長度為3的列表執行此操作,則進行正常置換,我將同時獲得[1, 2, 3]
和[2, 3, 1]
。 但是, [2, 3, 1]
只是[1, 2, 3]
[2, 3, 1]
的旋轉,因此我不想包含它。
我可以生成所有排列,遍歷並刪除違反此約束的元素,但這似乎很浪費。
在考慮排列時,而不是考慮所有排列,然后刪除重復的排列時,該如何做呢?
謝謝!
移除第一個元素,生成其他元素的排列,然后將第一個元素放回每個排列的前面。 這將生成每個旋轉等效類的一個代表,特別是原始第一個元素仍在第一位的代表。
import itertools
def permutations(iterable):
# Special case: empty iterable
iterable = list(iterable)
if not iterable:
yield ()
return
first, *rest = iterable
for subperm in itertools.permutations(rest):
yield (first, *subperm)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.