【问题标题】:Calculate the possible permutations given a length and possible characters计算给定长度和可能字符的可能排列
【发布时间】:2018-07-24 23:58:12
【问题描述】:

我正在尝试计算给定一组字符可能的排列数,例如:'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

【问题讨论】:

  • this
  • 看起来像2^n
  • 另外,mystr='AABC' 时会发生什么?你算 As 两次还是只算一次?
  • 只有一次,我需要这个数字,因为它将成为我算法中限制迭代次数的条件的一部分

标签: python combinations permutation


【解决方案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}

【讨论】:

  • 是的,这就是我需要的,现在我想我可以添加一个计数器并将其全部加起来得到总数?
  • 只是sum(s.values())
【解决方案2】:

如果你想要确定有多少种方式可以从一组 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

【讨论】:

  • 但我需要它根据我提供的字符和长度而增长,例如:字符 abcde 和长度 5ab 和长度 17 应该给出我131072
  • 如果ab length 17 给你 131072,我只能想象你所说的实际上并不是排列。这是否也意味着abcde 长度 5 应该给你 3125?
  • 不,abcde 应该给我3905,因为您不仅可以创建长度为 5 的初始组合,还可以创建其他长度 4,3,2,1
  • 那么您想要从该组字符中获得最多 5 个字符的所有组合的数量吗?在那种情况下,为什么 17 会给你 131072?它不应该给你一个更高的数字吗?
  • 是的,我的错应该是262142
猜你喜欢
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多