Am nevoie pentru a găsi frecvența de elemente într-o listă
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
ieșire->
b = [4,4,2,1,2]
De asemenea, vreau pentru a elimina duplicatele dintr-o
a = [1,2,3,4,5]
În Python 2.7 (sau mai nou), puteți utiliza colecții.Contra
:
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)]
Dacă sunteți folosind Python 2.6 sau mai mare, îl puteți descărca de aici.
Python 2.7+ introduce Dicționar de Înțelegere. Construirea dicționarului din lista vor primi conta precum și a scăpa de duplicate.
>>> 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]
Aici's un alt succint alternative folosind itertools.groupby
care, de asemenea, funcționează pentru neordonate de intrare:
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))}
rezultate
{1: 4, 2: 4, 3: 2, 4: 1, 5: 2}
Puteți face acest lucru:
import numpy as np
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
np.unique(a, return_counts=True)
Ieșire:
(array([1, 2, 3, 4, 5]), array([4, 4, 2, 1, 2], dtype=int64))
Prima serie este de valori, și cea de-a doua matrice este numărul de elemente cu aceste valori.
Deci, Dacă doriți să obțineți doar matrice cu numere ar trebui să utilizați acest:
np.unique(a, return_counts=True)[1]
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'])
Mi-ar pur și simplu utilizați scipy.statistici.itemfreq în felul următor:
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]
puteti verifica documentația aici: http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.itemfreq.html
Eu sunt destul de târziu, dar acest lucru va lucra, de asemenea, și va ajuta pe alții:
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
va produce acest lucru..
Freq [4, 4, 2, 1, 2]
number[1, 2, 3, 4, 5]
Acest răspuns este mai explicit
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}
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)
Ieșire
D:\MLrec\venv\Scripts\python.exe D:/MLrec/listgroup.py
[4, 4, 2, 1, 2]
[1, 2, 3, 4, 5]
Soluție simplă, folosind un dicționar.
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]))
am'm folosind Counter pentru a genera o freq. dict din fișier text cuvinte în 1 linie de cod
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])
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]
Pentru a elimina duplicate și să Mențină ordinea:
list(dict.fromkeys(get_count(a)))
>>>[4, 2, 1]