繁体   English   中英

在Python中将2个字符置换成固定长度的字符串,每个字符的数目相等

[英]Permutations of 2 characters in Python into fixed length string with equal numbers of each character

我已经仔细阅读了以下两个问题,这些问题似乎与我要问的问题最接近,但是却无法帮助我找到问题的答案。

x长度为2个字符的排列

如何在Python中生成列表的所有排列

我试图找到一种方法来接受两个字符,例如“ 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选择k 您的总大小为n ,而"A"的元素数为k 因此,您的答案将是:

(n选择k)=(40选择20)= 137846528820

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM