我写了一个简单的python程序:
#!/usr/bin/env python3.5
import sys, itertools
sCharacters = '123'
for iCombinationLength in range(0, len(sCharacters)+1):
for aCombination in itertools.combinations_with_replacement(sCharacters, iCombinationLength):
print(''.join(aCombination))
这输出以下内容:
1
2
3
11
12
13
22
23
33
111
112
113
122
123
133
222
223
233
333
然而,对于数字1 2和3的所有组合,它需要包括:
311
312
313
321
322
323
331
332
333
正如你在上面所看到的,它没有。我已经看到其他帖子给出combination_with_replacement函数作为解决方案,以获得传入的字符的所有可能组合。但这似乎没有发生。我在这里做错了什么,如何在字符变量中得到所有可能的字符组合?
感谢您的时间; - )
答案 0 :(得分:2)
"组合"是一个对订单不敏感的术语;如果您有113
,那么您就不需要131
或311
,因为所有这些都是相同的"组合" (如果combinations_with_replacement
的输入序列是唯一的,您可以在转换为collections.Counter
后将输出视为所有唯一值;无论顺序如何,两个1
和{{1} }只是3
)。
如果您想要订购敏感版collections.Counter({1: 2, 3:1})
(combinations_with_replacement
,113
和131
都是单独的输出),请使用itertools.product
和{ {1}}参数(311
必须通过关键字传递,因为repeat
的设计,它需要可变长度的位置参数):
repeat