Я бы использовал Python itertools
, но если бы вам пришлось реализовать это самостоятельно, вот код, который возвращает все перестановки указанного размера для списка значений.
Пример: values = [1,2,3]
, size = 2
=> [[3, 2], [2, 3], [2, 1], [3, 1], [1, 3], [1, 2]]
def permutate(values, size):
return map(lambda p: [values[i] for i in p], permutate_positions(len(values), size))
def permutate_positions(n, size):
if (n==1):
return [[n]]
unique = []
for p in map(lambda perm: perm[:size], [ p[:i-1] + [n-1] + p[i-1:] for p in permutate_positions(n-1, size) for i in range(1, n+1) ]):
if p not in unique:
unique.append(p)
return unique