繁体   English   中英

计算给定长度和可能字符的可能排列

[英]Calculate the possible permutations given a length and possible characters

我正在尝试计算给定一组字符(例如'a','b'和一个长度例如2可能排列数。

from itertools import product
mystr = 'ABC'
prodlen = 3
products = list(product(mystr,repeat=prodlen))
print(products)

但这是打印:

[('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'A', 'C'), ('A', 'B', 'A'), ('A', 'B', 'B'), ('A', 'B', 'C'), ('A', 'C', 'A'), ('A', 'C', 'B'), ('A', 'C', 'C'), ('B', 'A', 'A'), ('B', 'A', 'B'), ('B', 'A', 'C'), ('B', 'B', 'A'), ('B', 'B', 'B'), ('B', 'B', 'C'), ('B', 'C', 'A'), ('B', 'C', 'B'), ('B', 'C', 'C'), ('C', 'A', 'A'), ('C', 'A', 'B'), ('C', 'A', 'C'), ('C', 'B', 'A'), ('C', 'B', 'B'), ('C', 'B', 'C'), ('C', 'C', 'A'), ('C', 'C', 'B'), ('C', 'C', 'C')]

相反,我需要的是: A, B, AA, BB, AB, BA而我需要这些排列的总数。 该数字应与下面的示例一样高:

17  131072
16  65536
15  32768
14  16384
13  8192
12  4096
11  2048
10  1024    
9   512
8   256
7   128
6   64
5   32
4   16
3   8
2   4
1   2
Total = 262142

好像你想要的

mystr='AB'
u=len(set(mystr))
r = 17
s={}
for i in range(1,r+1):
    s[i] = u**i

{1: 2,
 2: 4,
 3: 8,
 4: 16,
 5: 32,
 6: 64,
 7: 128,
 8: 256,
 9: 512,
 10: 1024,
 11: 2048,
 12: 4096,
 13: 8192,
 14: 16384,
 15: 32768,
 16: 65536,
 17: 131072}

如果要确定从替换的n个字符集中选择k个字符的方式,那么对于k个字符中的每一个,您都有n个选择。 总计为n^k ,因为n^k个选择中的每一个都有n个选项。 如果你想用这样的组合至少为 k的字符的数量,你想是这样的:

my_string = 'ab'
n = len(set(my_string))
k = 17
p = sum([n**(i+1) for i in range(k)])  # 262143

暂无
暂无

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

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