我正在尝试计算给定一组字符(例如'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
答案 0 :(得分:1)
好像你想要的
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}
答案 1 :(得分:0)
如果要确定从替换的n个字符集中选择k个字符的方式,那么对于k个字符中的每一个,您都可以选择n个。这等于n^k
,因为k个选择中的每一个都有n个选项。如果您想要最多包含 k个字符的此类组合的总数,则需要这样的内容:
my_string = 'ab'
n = len(set(my_string))
k = 17
p = sum([n**(i+1) for i in range(k)]) # 262143