我知道通过使用itertools
,我们可以生成products
,permutations
和{
max_allowed_len(sequence)= 3
iterable= ABC
repeat= 3 (or just `range(len('ABC')`)
我感兴趣的是通过重复r来生成具有len(sequence)=0 len(sequence)=1 OR len(sequence)=2 and len(sequence)=3
的ABC的所有不同的iterable集合。这有点像是一种奇怪的排列,重复允许不同的序列。所以我的空间是:
3^0 + 3^1 + 3^2 + 3^3= 1 + 3 + 9+ 27= 40
有人能建议我如何用python甚至c/c++实现它吗?
“0”(无(序列长度0))
长度为1的序列
^{pr2}$长度为2的序列
'AA'
'BB'
'CC'
'AB'
'AC',...
长度为3的序列
'AAB'
'ABA'
'AAC'
'ACA'`
这样下去。所以这里的长度是0,1,2和3(最大值)。
这里有一个(相对)简单的方法来为字符串输入构造这样的迭代器。它为空序列输出一个空字符串
''
。我调用它两次以使输出更易于阅读。在该函数的核心是一个生成器表达式循环,它使用
product
和repeat
参数为从零到输入字符串长度的每组乘积生成迭代器。这些迭代器随后被chain.from_iterable
使用并馈送给''.join
方法,使用imap
实际调用product
生成的每个元组上的方法。在输出
^{pr2}$FWIW,这是一个使用普通
chain
函数的替代版本;它使用了一个额外的循环而不是imap
,因此它的效率可能会更低,但我想它也可能更容易理解。在相关问题 更多 >
编程相关推荐