Algorithm Python:组合

Algorithm Python:组合,algorithm,python-3.x,permutation,Algorithm,Python 3.x,Permutation,我想解决一个涉及数组不同排列的问题。我想要一个函数来检查被检查的数组是否匹配某个条件,如果不匹配,则生成一个新的排列进行检查,依此类推。我相信这涉及到一个while语句,所以我的问题更多地在于如何创建这样一个算法来生成唯一但不是随机的,从而避免每次迭代时重复排列。存在一个限制:数组将包含至少2个但不超过10个元素。此外,如果条件不匹配任何排列,则返回值应为False。到目前为止,我还没有代码,因为我还无法提出我想要使用的算法。任何想法都会有帮助。你为什么需要重新发明轮子?既然您已经标记了pyth

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

你为什么需要重新发明轮子?既然您已经标记了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)

如果您必须自己编写一个算法,那么您应该了解生成置换的方法。这是相当直观的,并产生排列在上!时间。

堆栈溢出不是来帮你做作业的。在来寻求帮助之前,你真的应该在自己身上付出至少一点努力。例如,通过谷歌搜索python排列会很快告诉您,标准库中的itertools模块中有一个函数可以为您生成排列。@Blckknght感谢您的回答,但是我不会为了家庭作业而这样做,我也不想打印每一个排列,或者甚至产生它——这对于我的目标来说太过分了。我需要在每次迭代中修改数组以获得新的排列。如果有一种方法可以用itertools实现这一点,请详细说明一下。与itertools中的所有函数一样,itertools.permutations函数返回一个惰性迭代器对象。迭代器生成输入的每个置换,并在其上进行迭代。如果您在早期发现一个可接受的排列,您可以打破循环,而其余的排列将不会生成。