#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. я вижу, хорошая идея с кодом, спасибо! но его насчитывают множество вариантов этого числа… и моя цель не в том, чтобы нарушать порядок. как сделал мозуэй.