Python itertools.combinations_with_replacement没有返回所有组合

时间:2016-06-07 03:07:11

标签: python python-3.x itertools

我写了一个简单的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函数作为解决方案,以获得传入的字符的所有可能组合。但这似乎没有发生。我在这里做错了什么,如何在字符变量中得到所有可能的字符组合?

感谢您的时间; - )

1 个答案:

答案 0 :(得分:2)

"组合"是一个对订单不敏感的术语;如果您有113,那么您就不需要131311,因为所有这些都是相同的"组合" (如果combinations_with_replacement的输入序列是唯一的,您可以在转换为collections.Counter后将输出视为所有唯一值;无论顺序如何,两个1和{{1} }只是3)。

如果您想要订购敏感版collections.Counter({1: 2, 3:1})combinations_with_replacement113131都是单独的输出),请使用itertools.product和{ {1}}参数(311必须通过关键字传递,因为repeat的设计,它需要可变长度的位置参数):

repeat