首页 > 解决方案 > 创建具有重复元素的所有排列,而不重复排列本身

问题描述

我有一个字符串'UUUUUUUUUDDDDDDD',它们是 9 Us 和 7 Ds。

我想生成所有排列,例如:

'UUUUUUUUUDDDDDDD'
'DUUUUUUUUUDDDDDD'
'DUUUUUDUUUDDDDUD'
'DUUDUUDUUUDDDDUU'

换句话说,所有可能的字符串 9 Us 和 7 Ds

我正在尝试使用itertools.permutations(),但是该函数将每个元素UD视为不同的元素,因此我得到了重复的排列。

在下面的示例中,我将使用一个较小的字符串UUD来演示以下问题itertools.permutations

for g in itertools.permutations('UUD'):
    print(g)

我明白了

('U', 'U', 'D')
('U', 'D', 'U')
('U', 'U', 'D')
('U', 'D', 'U')
('D', 'U', 'U')
('D', 'U', 'U')

我想要

('U', 'U', 'D')
('U', 'D', 'U')
('D', 'U', 'U')

生成所有可能性,然后将它们添加到一个集合中以使其唯一不是一个可行的解决方案,因为将有太多的排列存储在内存中。我想一次生成一个,使用它并丢弃它。

标签: pythonuniquepermutationrepeat

解决方案


推荐阅读