问题:我有一些数字列表,例如 [1,1,2]。我需要生成唯一的排列组合。这些排列组合是 [1,1,2], [1,1,2], [1,2,1], [1,2,1], [2,1,1], [2,1,1]。我仅需要生成唯一的排列组合,即 [1,1,2], [1,2,1], [2,1,1]。
我的尝试:我第一次尝试是保留现有排列组合的集合,并创建一个过滤器用于 itertools.permutations 生成器,该过滤器将使用集合来过滤重复项。然而,由于效率原因,我宁愿不生成那些排列组合。即使对于仅含有12个数字的小列表,只有1%是唯一的。
我有一个初始想法,但似乎无法全部理解:我可以创建列表中唯一值的排列组合,即 [1,2],并将剩余数字放在不同的位置中。
感谢任何帮助,并且明确表示,我不想过滤掉重复的排列组合,我想首先只生成唯一的排列组合。
我的尝试:我第一次尝试是保留现有排列组合的集合,并创建一个过滤器用于 itertools.permutations 生成器,该过滤器将使用集合来过滤重复项。然而,由于效率原因,我宁愿不生成那些排列组合。即使对于仅含有12个数字的小列表,只有1%是唯一的。
我有一个初始想法,但似乎无法全部理解:我可以创建列表中唯一值的排列组合,即 [1,2],并将剩余数字放在不同的位置中。
感谢任何帮助,并且明确表示,我不想过滤掉重复的排列组合,我想首先只生成唯一的排列组合。
frozenset(itertools.permutations(seq))
呢?在应用frozenset之前,可能需要将可变对象转换为不可变对象。 - jrennie