import concurrent.futures
def permutations(head, rest):
if len(rest) == 0:
return [head]
else:
res = []
data = sorted(set(rest))
for i in data:
restx = rest[:]
restx.remove(i)
headx = head + [i]
res += permutations(headx, restx)
return res
if __name__ == '__main__':
data = [1, 1, 1, 1, 2, 2, 2, 3, 3, 4]
data_list = []
for i in set(data):
temp = data[:]
temp.remove(i)
data_list.append([[i], temp])
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
futures = [
executor.submit(permutations, head, rest)
for head, rest in data_list
]
for future in concurrent.futures.as_completed(futures):
res = future.result()
print(res)