產生列表的所有排列
給定一個元素列表,任務是產生元素的所有可能排列。排列是清單中元素的不同組合。
標準函式庫解決方案
Python 標準函式庫為此提供了itertools.permutations 函數:
import itertools list(itertools.permutations([1, 2, 3]))
此程式碼產生清單[1, 2, 3]的所有排列並將它們作為列表返回
替代實現
這是使用遞歸的排列函數的替代實現:
def permutations(elements): if len(elements) <= 1: yield elements return for perm in permutations(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:]
此實現透過迭代構造排列將列表的第一個元素添加到其餘元素排列中的不同位置elements.
另一種替代方法使用itertools.product:
def permutations(iterable, r=None): pool = tuple(iterable) n = len(pool) r = n if r is None else r for indices in product(range(n), repeat=r): if len(set(indices)) == r: yield tuple(pool[i] for i in indices)
此實作迭代從0 到n-1(其中n 是列表長度)的所有可能的索引組合併產生如果索引是唯一的,則每個組合的排列(表示清單中的每個元素都包含一次)。
以上是如何在 Python 中產生列表的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!