【发布时间】:2012-08-22 17:11:14
【问题描述】:
现在花了相当多的时间试图想出一个方法来(我认为)应该是一个相对简单的过程,我已经设法编写了将生成结果的代码(感谢关于这个美妙的建议论坛!),但根据我的计算,计算所有可能性需要几年时间,所以我拼命寻求帮助,因为我担心我的电脑可能活不到那一天。 :) 任何意见将不胜感激!
我想要实现的是来自 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 个“C”的排列,因此会生成大量不包含 3 个“C”的不必要排列,因此它花费的时间比必要的要长。有没有人有任何建议我如何让 Python 在生成排列时遵守 3x 'C' 限制?
提前非常感谢!
【问题讨论】:
标签: python permutation restrictions