2017-07-02 47 views
-4

我正在寻找解决涉及数组的不同排列的问题。我想要一个函数来检查被审查的数组是否匹配一个条件,但是如果不匹配,则会生成一个新的排列来检查,等等等等。我相信这涉及到一个while语句,所以我的问题更多地在于如何创建这样的算法来在每次迭代时生成唯一的(但不是随机的以避免重复)置换。存在限制:该数组将包含至少2个但不超过10个元素。此外,如果条件不匹配,返回应该是False到目前为止,我还没有代码,因为我不能提出我想要的算法。任何想法都会有帮助。Python:组合

+0

堆栈溢出不是在这里为你做你的功课。在寻求帮助之前,你应该至少投入一点努力。例如,使用google搜索“python permutations”会很快告诉你,标准库中的'itertools'模块有一个函数可以为你生成排列。 – Blckknght

+0

@Blckknght谢谢您的回应,但是我不会为了做家庭作业而去参加这个活动,而且我也不打算列出每一个组合,甚至是创建它 - 这对于我的目标来说太过分了。我需要每次迭代更改数组以获得新的排列。如果有一种方法可以用itertools来做到这一点,请您详细说明一下吗? –

+0

像'itertools'中的所有函数一样,'itertools.permutations'函数返回一个惰性迭代器对象。迭代器在其上生成输入迭代的每个排列。如果在早期发现可接受的置换,则可以跳出循环,其余的置换不会生成。 – Blckknght

回答

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!)时间产生排列。