生成列表的所有排列
给定一个元素列表,任务是生成元素的所有可能排列。排列是列表中元素的不同组合。
标准库解决方案
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中文网其他相关文章!