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

时间:2018-07-24 15:31:04

标签: python combinations permutation

我正在尝试计算给定一组字符(例如'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

2 个答案:

答案 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