Python:组合

时间:2017-07-02 01:10:39

标签: algorithm python-3.x permutation

我希望解决涉及数组不同排列的问题。我想要一个函数来检查被仔细审查的数组是否与条件匹配,但如果没有,则生成一个新的排列以进行检查,依此类推。我认为这涉及到一段时间的陈述,所以我的问题更多地在于如何创建这样的算法以在每次迭代时生成唯一的(但不是随机的以避免重复)置换。存在限制:数组将包含至少2个但不超过10个元素。另外,如果条件不匹配排列,则返回值应为False到目前为止我没有代码,因为我无法提出我想要的算法。任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:0)

为什么需要重新发明轮子?既然你已经标记了python,你应该知道有很多库可以帮助你做这样有用的事情。其中一个库是itertools,更具体地说是itertools.permutations函数:

>>> from itertools import permutations
>>> x = [1, 2, 3, 4, 5, 6]
>>> for p in permutations(x):
...     print(p)
... 
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

如果您必须自己编写算法,那么您应该了解用于生成排列的Johnson-Trotter Algorithm。它非常直观,并在O(n!)时间内生成排列。