순서없는 목록 에서 요소의 빈도를 찾아야 합니다.
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
출력->
b = [4,4,2,1,2]
또한 중복을 제거하고 싶습니다.
a = [1,2,3,4,5]
답변
참고 :를 사용하기 전에 목록을 정렬해야합니다 groupby
.
목록이 주문 목록 인 경우 패키지 groupby
에서 사용할 수 있습니다 itertools
.
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]
답변
Python 2.7 이상에서는 다음을 사용할 수 있습니다 collections.Counter
.
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.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]
답변
모양 수를 세려면
from collections import defaultdict
appearances = defaultdict(int)
for curr in a:
appearances[curr] += 1
중복을 제거하려면
a = set(a)
답변
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]
답변
요소의 빈도를 세는 것은 사전을 사용하여 수행하는 것이 가장 좋습니다.
b = {}
for item in a:
b[item] = b.get(item, 0) + 1
중복을 제거하려면 세트를 사용하십시오.
a = list(set(a))
답변
다음 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}