我已经查看了下面的 2 个问题,它们似乎最接近我要问的问题,但不要让我找到问题的答案。
Permutation of x length of 2 characters
How to generate all permutations of a list in Python
我正在尝试找到一种方法来获取 2 个字符,例如“A”和“B”,然后将这些字符的所有唯一排列组合成一个 40 个字符的字符串。另外-我需要每个字符在字符串中出现 20 次。因此,所有结果字符串各有 20 个“A”和 20 个“B”。
像这样:
'AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBB'
'AAAAAAAAAAAAAAAAAAABABBBBBBBBBBBBBBBBBBB'
'AAAAAAAAAAAAAAAAAABAABBBBBBBBBBBBBBBBBBB'
等...
我真正需要的是遵循这些规则的唯一组合的数量。
y=['A','A','A','A','B','B','B','B']
comb = set(itertools.permutations(y))
print("Combinations Found: {:,}".format(len(comb)))
这可行,但它不能很好地扩展到 20 个“A”和 20 个“B”的输入字符串。上面的代码执行需要 90 秒。即使只是扩展到 10 个“A”和 10 个“B”,在我杀死它之前也运行了 20 分钟。
鉴于我所描述的参数,是否有更有效的方法来解决这个问题?
最佳答案
如果您只需要计数,这可以概括为 n
choose k
.您的总大小为 n
,"A"
的元素数为 k
。所以,你的答案是:
(n 选择 k)=(40 选择 20)= 137846528820
关于python - 将 Python 中的 2 个字符排列成固定长度的字符串,每个字符的数量相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936344/