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
不会显示,ppo
和opp
会显示。
预期输出opp ppp poo ppo ooo opo oop pop
实际输出opp ppp poo ppo ooo opo oop
答案 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已排序,则组合元组将按排序顺序生成。
根据元素的位置而不是元素将元素视为唯一元素。因此,如果输入元素是唯一的,则生成的组合也将是唯一的。
强调我的。