使用itertools combonations_with_replacement时缺少序列

时间:2015-08-15 02:47:48

标签: python set itertools

from itertools import combinations_with_replacement

x = 'opo'
v = combinations_with_replacement(x, len(x))
ans = [''.join(map(str, x)) for x in v]
print(" ".join(set(ans)))

我不确定为什么我在这里错过了序列pop。为什么pop不会显示,ppoopp会显示。

预期输出opp ppp poo ppo ooo opo oop pop

实际输出opp ppp poo ppo ooo opo oop

2 个答案:

答案 0 :(得分:6)

考虑一下:

>>> x = 'abc'
>>> v = itertools.combinations_with_replacement(x, len(x))
>>> ans = [''.join(map(str, x)) for x in v]
>>> ans
['aaa', 'aab', 'aac', 'abb', 'abc', 'acc', 'bbb', 'bbc', 'bcc', 'ccc']

序列中的combinations_with_replacement的作用无关;只有序列中的位置计数。您的问题与询问为什么'bab''cac'未显示在我的示例中相同。提示:函数的名称不是permutations_with_replacement; - )

答案 1 :(得分:1)

正确记录here -

  

itertools.combinations_with_replacement(iterable,r)

     

从输入迭代中返回元素的r长度子序列,允许单个元素重复多次。

     

组合以字典排序顺序发出。因此,如果输入iterable已排序,则组合元组将按排序顺序生成。

     

根据元素的位置而不是元素将元素视为唯一元素。因此,如果输入元素是唯一的,则生成的组合也将是唯一的。

强调我的。