在Python中不重复计算排列

时间:2014-02-25 20:17:39

标签: python itertools

我有两个项目清单:

A = 'mno'
B = 'xyz'

我希望生成所有排列,无需替换,模拟将A中项目的所有组合替换为B中的项目,而不重复。 e.g。

>>> do_my_permutation(A, B)
['mno', 'xno', 'mxo', 'mnx', 'xyo', 'mxy', 'xyz', 'zno', 'mzo', 'mnz', ...]

这对我来说是直截了当的,但是我知道Python的标准itertools module,我相信它可能已经实现了这一点。但是,我无法识别实现此确切行为的函数。我可以用这个模块来实现这个功能吗?

3 个答案:

答案 0 :(得分:7)

这是你需要的:

["".join(elem) for elem in itertools.permutations(A+B, 3)]

并将permutations替换为combinations,如果您希望将相同三个字母的所有排序合并为一个项目(例如'mxo''mox'并非每个都单独出现在输出中。)

答案 1 :(得分:3)

您正在寻找itertools.permutations

来自文档:

  

元素根据其位置而不是其价值被视为唯一。因此,如果输入元素是唯一的,则不会有重复值。

答案 2 :(得分:0)

要只使用唯一的,词汇排序的排列,您可以使用以下代码:

import itertools

A = 'mno'
B = 'xyz'

s= {"".join(sorted(elem)) for elem in itertools.permutations(A+B, 3)}