kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 Bruce
Bruce
Question

Cum să numeri frecvența de elemente într-o listă?

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]
211 2010-01-29T12:08:20+00:00 29
 Flimzy
Flimzy
Întrebarea editată 30 mai 2018 в 2:29
Programare
frequency
python
counting
counter
Această întrebare are 1 răspuns în engleză, pentru a le citi, vă rugăm să vă logați.
 unutbu
unutbu
29 ianuarie 2010 в 1:02
2010-01-29T13:02:41+00:00
Mai mult
Sursă
Editează
#9992359

Î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.

 unutbu
unutbu
Răspuns editat 15 noiembrie 2017 в 10:21
486
0
Solution / Answer
Nadia Alramli
Nadia Alramli
29 ianuarie 2010 в 12:18
2010-01-29T12:18:39+00:00
Mai mult
Sursă
Editează
#9992357

Deoarece lista este ordonată puteți face acest lucru:

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)]

Ieșire:

[4, 4, 2, 1, 2]
127
0
 Amjith
Amjith
16 martie 2012 в 8:44
2012-03-16T20:44:01+00:00
Mai mult
Sursă
Editează
#9992360

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]
102
0
Idan K
Idan K
29 ianuarie 2010 в 12:16
2010-01-29T12:16:03+00:00
Mai mult
Sursă
Editează
#9992354

Pentru a contoriza numărul de apariții:

from collections import defaultdict

appearances = defaultdict(int)

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

Pentru a elimina duplicate:

a = set(a) 
47
0
 lindelof
lindelof
29 ianuarie 2010 в 12:16
2010-01-29T12:16:19+00:00
Mai mult
Sursă
Editează
#9992355

Numărarea frecvenței de elemente este, probabil, cel mai bine cu un dicționar:

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

Pentru a elimina duplicatele, utilizați un set:

a = list(set(a))
24
0
 YOU
YOU
29 ianuarie 2010 в 1:00
2010-01-29T13:00:53+00:00
Mai mult
Sursă
Editează
#9992358

În Python 2.7+, ai putea folosi colecții.Contra pentru a conta obiecte

>>> 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]
23
0
 rbento
rbento
31 martie 2019 в 2:17
2019-03-31T02:17:50+00:00
Mai mult
Sursă
Editează
#9992379

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}
 rbento
rbento
Răspuns editat 31 martie 2019 в 2:49
12
0
Evgenii Pavlov
Evgenii Pavlov
23 iulie 2017 в 6:11
2017-07-23T18:11:17+00:00
Mai mult
Sursă
Editează
#9992369

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]
Evgenii Pavlov
Evgenii Pavlov
Răspuns editat 23 iulie 2017 в 6:17
11
0
Anirban Lahiri
Anirban Lahiri
27 decembrie 2017 в 7:39
2017-12-27T19:39:37+00:00
Mai mult
Sursă
Editează
#9992373
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'])
 sheldonzy
sheldonzy
Răspuns editat 27 decembrie 2017 в 10:19
7
0
Lakshman Prasad
Lakshman Prasad
29 ianuarie 2010 в 12:18
2010-01-29T12:18:15+00:00
Mai mult
Sursă
Editează
#9992356
seta = set(a)
b = [a.count(el) for el in seta]
a = list(seta) #Only if you really want it.
7
0
Utilizator anonim
30 ianuarie 2016 в 6:35
2016-01-30T18:35:39+00:00
Mai mult
Sursă
Editează
#9992365

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

6
0
 jax
jax
26 octombrie 2018 в 3:17
2018-10-26T15:17:10+00:00
Mai mult
Sursă
Editează
#9992377

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]
 jax
jax
Răspuns editat 14 ianuarie 2019 в 3:18
4
0
 user2422819
user2422819
6 decembrie 2016 в 4:50
2016-12-06T16:50:55+00:00
Mai mult
Sursă
Editează
#9992366
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
4
0
 t3rse
t3rse
29 ianuarie 2010 в 12:10
2010-01-29T12:10:59+00:00
Mai mult
Sursă
Editează
#9992353

Pentru prima întrebare, repeta lista și de a folosi un dicționar pentru a ține evidența de elemente existsence.

Pentru a doua întrebare, trebuie doar să utilizați stabilit de operator.

4
0
Corey Richey
Corey Richey
30 iunie 2015 в 6:39
2015-06-30T18:39:12+00:00
Mai mult
Sursă
Editează
#9992362

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}
3
0
Sai Kiran
Sai Kiran
9 aprilie 2019 в 12:00
2019-04-09T12:00:11+00:00
Mai mult
Sursă
Editează
#9992380
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. Set de colectare nu permite duplicate, trece o listă la set() constructorul va oferi o iterable de obiecte unice. count() returnează un număr întreg conta atunci când un obiect este într-o listă este trecut. Cu obiecte unice sunt numărate și fiecare număr valoare este stocată prin adăugarea la o listă goală de ieșire
  2. lista() constructor este folosit pentru a converti un set(o) în listă și menționate de către aceeași variabilă o

Ieșire

D:\MLrec\venv\Scripts\python.exe D:/MLrec/listgroup.py
[4, 4, 2, 1, 2]
[1, 2, 3, 4, 5]
Sai Kiran
Sai Kiran
Răspuns editat 9 aprilie 2019 в 12:55
2
0
 oshaiken
oshaiken
18 aprilie 2019 в 11:32
2019-04-18T23:32:45+00:00
Mai mult
Sursă
Editează
#9992381

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]))
1
0
 roberto
roberto
27 ianuarie 2018 в 9:37
2018-01-27T09:37:28+00:00
Mai mult
Sursă
Editează
#9992375

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])
1
0
 Pradam
Pradam
26 ianuarie 2018 в 9:26
2018-01-26T09:26:04+00:00
Mai mult
Sursă
Editează
#9992374
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]
1
0
Abhishek Poojary
Abhishek Poojary
29 septembrie 2019 в 4:38
2019-09-29T16:38:05+00:00
Mai mult
Sursă
Editează
#9992382

O altă abordare de a face acest lucru, deși prin utilizarea unui aparat mai greu, dar puternic bibliotecă - NLTK.

import nltk

fdist = nltk.FreqDist(a)
fdist.values()
fdist.most_common()
0
0
Comunități asemănătoare 1
Python România
Python România
127 utilizatori
Comunitatea pasionaților de Python din România.
Deschide telegram
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
ALEX EPRST
Înregistrat 14 ore în urmă
2
Daniel Gogov
Înregistrat 1 săptămână în urmă
3
工藤 芳則
Înregistrat 2 săptămâni în urmă
4
Ирина Беляева
Înregistrat 2 săptămâni în urmă
5
Darya Arsenyeva
Înregistrat 3 săptămâni în urmă
DE
ES
FR
ID
IT
JA
KO
NL
NO
PT
RO
RU
TR
ZH
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire