簡體   English   中英

Python:根據條件生成所有排列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM