条件指定付きの順列作成

# 組合せチェック

def data_check(head):

    data = [1, 2, 1]

    n_head = len(head)
    n_data = len(data)

    n = n_head if n_head < n_data else n_data

    if head[:n] == data[:n]:
        return True
    else:
        return False


def perm(head, rest):

    # 条件確認
    if not data_check(head):
        return None

    if len(rest) == 0:
        return [head]

    else:
        result = []

        # set(集合)型で重複を削除、ソート
        data = sorted(set(rest))

        for i in data:

            print(head)

            #配列の複製
            rest_del = rest[:]

            #指定データ削除
            rest_del.remove(i)

            #指定データ削除
            head_add = head + [i]

            # 結果
            temp = perm(head_add, rest_del)

            # 結果保存
            if temp:
                result += temp

        return result


junretsu = perm([], [1, 1, 1, 2, 2, 3])

#順列の個数
print(len(junretsu))

#順列
print(junretsu)