现在花了相当多的时间试图想出一种方法(我认为)应该是一个相对简单的过程,我设法编写了将产生结果的代码(感谢这个精彩论坛上的建议!) ,但根据我的计算,计算所有可能性需要几年时间,所以我拼命寻求帮助,因为我担心我的电脑可能活不到那一天。:) 任何输入将不胜感激!
我想要实现的是来自 10 个唯一条目的列表(例如 ['A','B','C','D','E','F','G',H','I ','J']),获取长度为 10 的字符串上的所有排列,但要求元素中的 1 个(例如 'C')应恰好出现 3 次,并且出现在所有可能的位置。
现在我正在使用:
options = ['A','B','C','D','E','F','G','H','I','J']
def combos(options,n):
if (n <= 0): return
for s in options:
if len(s) <= n: yield s
for t in combos(options,n-len(s)): yield s+t
for x in combos(options,10):
if x.count("C") == 3 and len(x) == 10:
print x
这样,它正在计算所有可能的排列并选择具有 3 个“Cs”的排列,因此会生成大量不包含 3 个“Cs”的不必要排列,因此它花费的时间比必要的要长。有人对我如何让 Python 在生成排列时遵守 3x 'C' 限制有任何建议吗?
很多,非常感谢提前!