>>> import collections >>> a = [5, 1, 2, 2, 4, 3, 1, 2, 3, 1, 1, 5, 2] >>> counter = collections.Counter(a) >>> counter Counter({1: 4, 2: 4, 5: 2, 3: 2, 4: 1}) >>> counter.values() dict_values([2, 4, 4, 1, 2]) >>> counter.keys() dict_keys([5, 1, 2, 4, 3]) >>> counter.most_common(3) [(1, 4), (2, 4), (5, 2)] >>> dict(counter) {5: 2, 1: 4, 2: 4, 4: 1, 3: 2} >>> # Get the counts in order matching the original specification, >>> # by iterating over keys in sorted order >>> [counter[x] for x insorted(counter.keys())] [4, 4, 2, 1, 2]
Если вы используете Python 2.6 или более поздней версии, вы можете скачать реализацию здесь.
Ответ 2
Если список отсортирован, вы можете использовать groupby из itertools стандартной библиотеки (если это не так, вы можете просто сначала отсортировать его, хотя это займет O (n lg n) времени):
from itertools import groupby
a = [5, 1, 2, 2, 4, 3, 1, 2, 3, 1, 1, 5, 2] [len(list(group)) for key, group in groupby(sorted(a))]
Вывод:
[4, 4, 2, 1, 2]
Ответ 3
Python 2.7+ вводит понимание словаря. Создание словаря из списка позволит вам подсчитать количество элементов, а также избавиться от дубликатов.
>>> a = [1,1,1,1,2,2,2,2,3,3,4,5,5] >>> d = {x:a.count(x) for x in a} >>> d {1: 4, 2: 4, 3: 2, 4: 1, 5: 2} >>> a, b = d.keys(), d.values() >>> a [1, 2, 3, 4, 5] >>> b [4, 4, 2, 1, 2]
Ответ 4
Подсчитайте количество появлений вручную, перебрав список и подсчитав их, используя collections.defaultdict для отслеживания того, что было замечено на данный момент: