Как подсчитать частоту элементов в списке?

Мне нужно найти частоту элементов в списке

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]

output->

b = [4,4,2,1,2]

Также я хочу удалить дубликаты из файла

a = [1,2,3,4,5]
Комментарии к вопросу (6)

В Python 2.7 (или новее), вы можете использовать коллекции .Счетчик:

import collections
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
counter=collections.Counter(a)
print(counter)
# Counter({1: 4, 2: 4, 3: 2, 5: 2, 4: 1})
print(counter.values())
# [4, 4, 2, 1, 2]
print(counter.keys())
# [1, 2, 3, 4, 5]
print(counter.most_common(3))
# [(1, 4), (2, 4), (3, 2)]

Если вы используете Python 2.6 или старше, вы можете скачать ее здесь.

Комментарии (6)
Решение

Так как список упорядочен вы можете сделать это:

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
from itertools import groupby
[len(list(group)) for key, group in groupby(a)]

Выход:

[4, 4, 2, 1, 2]
Комментарии (11)

В 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]
Комментарии (5)

Чтобы подсчитать количество появлений:

from collections import defaultdict

appearances = defaultdict(int)

for curr in a:
    appearances[curr] += 1

Для удаления дубликатов:

a = set(a) 
Комментарии (2)

Подсчет частоты элементов, вероятно, лучше всего делать с помощью словаря:

b = {}
for item in a:
    b[item] = b.get(item, 0) + 1

Чтобы удалить дубликаты, используйте набор:

a = list(set(a))
Комментарии (4)

В Python 2.7+, вы можете использовать коллекциях.Счетчик для подсчета предметов

>>> a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
>>>
>>> from collections import Counter
>>> c=Counter(a)
>>>
>>> c.values()
[4, 4, 2, 1, 2]
>>>
>>> c.keys()
[1, 2, 3, 4, 5]
Комментарии (2)

Здесь'с другой succint альтернативы с помощью модуле itertools.метод groupBy`, который также работает на неупорядоченный ввода:

from itertools import groupby

items = [5, 1, 1, 2, 2, 1, 1, 2, 2, 3, 4, 3, 5]

results = {value: len(list(freq)) for value, freq in groupby(sorted(items))}

результаты

{1: 4, 2: 4, 3: 2, 4: 1, 5: 2}
Комментарии (0)

Вы можете сделать это:

import numpy as np
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
np.unique(a, return_counts=True)

Выход:

(array([1, 2, 3, 4, 5]), array([4, 4, 2, 1, 2], dtype=int64))

Первый массив имеет значения, и второго массива-это количество элементов с такими значениями.

Так что если вы хотите получить просто массив с цифрами, вы должны использовать это:

np.unique(a, return_counts=True)[1]
Комментарии (0)
from collections import Counter
a=["E","D","C","G","B","A","B","F","D","D","C","A","G","A","C","B","F","C","B"]

counter=Counter(a)

kk=[list(counter.keys()),list(counter.values())]

pd.DataFrame(np.array(kk).T, columns=['Letter','Count'])
Комментарии (2)
seta = set(a)
b = [a.count(el) for el in seta]
a = list(seta) #Only if you really want it.
Комментарии (2)

Я бы просто использовать составляющей.статистика.itemfreq следующим образом:

from scipy.stats import itemfreq

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]

freq = itemfreq(a)

a = freq[:,0]
b = freq[:,1]

вы можете проверить документацию: http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.itemfreq.html

Комментарии (0)

Я довольно поздно, но это будет также работать, и поможет другим:

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
freq_list = []
a_l = list(set(a))

for x in a_l:
    freq_list.append(a.count(x))

print 'Freq',freq_list
print 'number',a_l

будет производить этот..

Freq  [4, 4, 2, 1, 2]
number[1, 2, 3, 4, 5]
Комментарии (0)
def frequencyDistribution(data):
    return {i: data.count(i) for i in data}   

print frequencyDistribution([1,2,3,4])

...

 {1: 1, 2: 1, 3: 1, 4: 1}   # originalNumber: count
Комментарии (0)

Для первого вопроса выполните итерацию списка и используйте словарь для отслеживания существования элементов.

Для второго вопроса просто используйте оператор set.

Комментарии (1)

Этот ответ более четко

a = [1,1,1,1,2,2,2,2,3,3,3,4,4]

d = {}
for item in a:
    if item in d:
        d[item] = d.get(item)+1
    else:
        d[item] = 1

for k,v in d.items():
    print(str(k)+':'+str(v))

# output
#1:4
#2:4
#3:3
#4:2

#remove dups
d = set(a)
print(d)
#{1, 2, 3, 4}
Комментарии (0)
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]

# 1. Get counts and store in another list
output = []
for i in set(a):
    output.append(a.count(i))
print(output)

# 2. Remove duplicates using set constructor
a = list(set(a))
print(a)
  1. Набор сбора не допускает дубликатов, передав список в набор() конструктор даст повторяемое совершенно уникальные объекты. функцию count() возвращает число целого числа, когда сдали объект, что находится в списке. При этом уникальные объекты подсчитываются и каждое значение хранится на добавление в пустой список выхода
  2. список() конструктор используется для преобразования набора(a) в список и передала той же переменной

Выход

D:\MLrec\venv\Scripts\python.exe D:/MLrec/listgroup.py
[4, 4, 2, 1, 2]
[1, 2, 3, 4, 5]
Комментарии (1)

Простое решение с помощью словаря.

def frequency(l):
     d = {}
     for i in l:
        if i in d.keys():
           d[i] += 1
        else:
           d[i] = 1

     for k, v in d.iteritems():
        if v ==max (d.values()):
           return k,d.keys()

print(frequency([10,10,10,10,20,20,20,20,40,40,50,50,30]))
Комментарии (0)

я'м, используя счетчик для генерации частоты. словарь из текстового файла слова в 1 строке кода

def _fileIndex(fh):
''' create a dict using Counter of a
flat list of words (re.findall(re.compile(r"[a-zA-Z]+"), lines)) in (lines in file->for lines in fh)
'''
return Counter(
    [wrd.lower() for wrdList in
     [words for words in
      [re.findall(re.compile(r'[a-zA-Z]+'), lines) for lines in fh]]
     for wrd in wrdList])
Комментарии (0)
from collections import OrderedDict
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
def get_count(lists):
    dictionary = OrderedDict()
    for val in lists:
        dictionary.setdefault(val,[]).append(1)
    return [sum(val) for val in dictionary.values()]
print(get_count(a))
>>>[4, 4, 2, 1, 2]

Для удаления дубликатов и поддерживать порядок:

list(dict.fromkeys(get_count(a)))
>>>[4, 2, 1]
Комментарии (0)

Еще один подход сделать это, хотя и с помощью более тяжелый, но мощный библиотеке - в nltk.

import nltk

fdist = nltk.FreqDist(a)
fdist.values()
fdist.most_common()
Комментарии (0)