Вывод повторяющихся комбинаций и количества их повторений
Я хочу, что бы код не выводил повторяемые комбинации цифр в списке , а при повторении комбинации выводил комбинацию и количество раз её повторений в конце кода.
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 (а также использовать как ключи в словарях) можно кортежи, но не списки - кортежи иммутабельны, а списки нет.