Вывод повторяющихся комбинаций и количества их повторений

Я хочу, что бы код не выводил повторяемые комбинации цифр в списке , а при повторении комбинации выводил комбинацию и количество раз её повторений в конце кода.

import random as r
c=0
while True:
    list=[1,2,3,4,5,6,7,8,9]
    r.shuffle(list)
    c=c+1
    print(list)
    if list == [1,2,3,4,5,6,7,8,9] :
        break

print(c)

Ответы (1 шт):

Автор решения: CrazyElf

Забавная задачка. Хотя это наверняка учебное задание, которое вы должны сами сделать, но поскольку задача прикольная, приведу возможное решение:

import random as r
from collections import Counter

cnt = Counter()
while True:

    lst=[1,2,3,4,5,6,7,8,9]
    r.shuffle(lst)
    cnt.update([tuple(lst)])

    if lst == [1,2,3,4,5,6,7,8,9] :
        break

print(sum(cnt.values()))
print(*cnt.most_common(10), sep='\n')

Пример вывода:

349857
((2, 3, 7, 5, 4, 1, 8, 6, 9), 9)
((4, 9, 8, 7, 2, 3, 1, 5, 6), 9)
((1, 3, 4, 6, 7, 2, 5, 9, 8), 8)
((9, 3, 5, 1, 7, 6, 8, 4, 2), 8)
((5, 1, 7, 4, 3, 6, 9, 2, 8), 8)
((1, 3, 6, 8, 9, 4, 2, 7, 5), 8)
((5, 1, 9, 3, 4, 2, 8, 7, 6), 8)
((2, 6, 8, 3, 9, 1, 4, 7, 5), 7)
((2, 8, 7, 3, 4, 9, 1, 5, 6), 7)
((5, 2, 7, 3, 4, 6, 8, 1, 9), 7)

Для подсчёта использована коллекция Counter. Элементы пришлось перевести из списков в кортежи, потому что считать через Counter (а также использовать как ключи в словарях) можно кортежи, но не списки - кортежи иммутабельны, а списки нет.

→ Ссылка