Убрать повторения из комбинаций в 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)))