Убрать повторения из комбинаций в Python

Нужно составить комбинации из цифр без повторений, помогите, пожалуйста усовершенствовать код, нельзя пользоваться itertools:

class Solution:
    def permutations(self, nums: list) -> list:
        if len(nums) == 0:
            return []
        elif len(nums) == 1:
            return [nums]
        else:
            res = []
            for i in range(len(nums)):
                x = nums[i]
                xs = nums[:i] + nums[i+1:]
                for p in self.permutations(xs):
                    res.append([x] + p)
            return res 

инпут такой:

1,1,2

аутпут такой:

1 1 2
1 2 1
1 1 2
1 2 1
2 1 1
2 1 1 

а должен быть таким:

2 1 1
1 2 1
1 1 2

Ответы (3 шт):

Автор решения: MihailPy

можно сделать вот так

from itertools import permutations

a = "1,1,2" # input
b = a.split(",") # разделение на список 


output = list(set(permutations(b, len(b)))))

permutations выводит комбинации, a set чистит от повторения.

сделайте вот так

def permutations(nums: list) -> list:
        if len(nums) == 0:
            return []
        elif len(nums) == 1:
            return [nums]
        else:
            res = []
            for i in range(len(nums)):
                x = nums[i]
                xs = nums[:i] + nums[i+1:]
                for p in permutations(xs):
                    if [x] + p not in res:
                        res.append([x] + p)
            return res
→ Ссылка
Автор решения: Danil Pylypenko
class Solution:
    def permutations(self, nums: list) -> list:
        if len(nums) == 0:
            return []
        elif len(nums) == 1:
            return [nums]
        else:
            res = []
            for i in range(len(nums) - 1, -1, -1):
                x = nums[i]
                xs = nums[:i] + nums[i + 1:]
                for p in self.permutations(xs):
                    if [x] + p not in res:
                        res.append([x] + p)
            return res

вывод

[[2, 1, 1], 
[1, 2, 1], 
[1, 1, 2]]
→ Ссылка
Автор решения: extrn
from collections import Counter

class Solution:
    def permutations(self, nums: list) -> list:
        def go(counter):
            if counter:
                for head in counter:
                    for tail in go(counter - Counter([head])):
                        yield [head] + tail
            else:
                yield []

        return list(go(Counter(nums)))
→ Ссылка