2015-02-06 3 views
-2

Скажем, у меня есть этот список: [1,1,2,2] Я хочу пробежать все перестановки этого. Если я напечатаю ту же перестановку, она будет напечатана 4 раза. Для [1,1,1,3] тот же номер будет напечатан 6 раз, Для [1,1,1,3,3] 12.Вычисление дубликатов подстановок в Python

В целом: (a1)! (a2)! ... (a)! Есть ли какая-либо функция, которая делает это в Python? Если нет, можете ли вы дать мне алгоритм, который работает в Python?

+0

Вы включили алгоритм в свой вопрос. Ваша формула определяет алгоритм. –

+0

Хорошо, что я знаю математику, но я действительно не знаю, как понимать это знание для python. –

+0

Вы пытались найти Google для факториала в python? затем умножая результаты на python? я думаю, что это не требует опыта python верхнего уровня кодера. –

ответ

0

Вы ищете что-то вроде следующего?

import math 

def repeats(nums): 
    counts = dict() 
    result = 1 

    for n in nums: 
     if n in counts: 
      counts[n] += 1 
     else: 
      counts[n] = 1 

    for n in counts.keys(): 
     result *= math.factorial(counts[n]) 

    return result 

print repeats([1, 1, 2, 2])  # prints 4 
print repeats([1, 1, 1, 3])  # prints 6 
print repeats([1, 1, 1, 3, 3]) # prints 12 
Смежные вопросы