Список групп Python по тем же номерам

#python #list #sequence

#питон #Список #последовательность

Вопрос:

Мне нужна помощь с функцией python, которая подсчитает для меня, сколько повторяющихся чисел в списке, если они разделены другим числом.

 nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]  

должен вернуться

 { [3]: 2, [1]: 3, [2]: 5, [1, 1]: 2, [2, 2, 2, 2]: 1 }  

Комментарии:

1. Вы можете отслеживать текущую полосу и установить соответствующее значение(значения) словаря в 1.

2. Я не думаю, что у вас может быть список в качестве ключа.

Ответ №1:

Вы можете использовать itertools.groupby для сбора последовательных чисел и collections.Counter их подсчета:

 nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]  from itertools import groupby from collections import Counter dict(Counter(tuple(g) for k,g in groupby(nums)))  

nb. Вы не можете использовать списки в качестве ключей словаря, вместо этого я использовал кортежи

Выход:

 {(3,): 2,  (1,): 3,  (2,): 5,  (1, 1): 2,  (2, 2, 2, 2): 1}  

Ответ №2:

Обратите внимание, что у вас не может быть списка в качестве ключа. Вместо этого мы можем использовать строку.

Это возвращает все длины полос, а не только максимальную и минимальную. Скажите в комментариях, хотите ли вы иного.

 nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2] results = {} streak = 0 previous = None for num in nums:  print(num)  if previous != num:  streak = 0  streak  = 1  previous = num  for i in range(1, streak   1):  results[str(num)*i] = results.get(str(num)*i, 0)   1  

Пожалуйста, прокомментируйте, если вы хотите получить объяснение.

Комментарии:

1. я вижу, хорошая идея с кодом, спасибо! но его насчитывают множество вариантов этого числа… и моя цель не в том, чтобы нарушать порядок. как сделал мозуэй.