AH7
AH7

Reputation: 39

Counting frequencies in two lists, Python

I'm new to programming in python so please bear over with my newbie question...

I have one initial list (list1) , which I have cleaned for duplicates and ended up with a list with only one of each value (list2):

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16],

list2 = [13, 19, 2, 16, 6, 5, 20, 21]

What I want is to count how many times each of the values in "list2" appears in "list1", but I can't figure out how to do that without getting it wrong.

The output I am looking for is something similar to this:

Number 13 is represented 1 times in list1. ........ Number 16 is represented 2 times in list1.

Upvotes: 4

Views: 4718

Answers (6)

user144153
user144153

Reputation: 858

In technical terms, list is a "type" of "object". Python has a number of built in types like strings (str), integers (int), and a few others that can be easily found on google. The reason this is important is because each object type has its own "methods". You can think of these methods as functions that complete common programming tasks and make your life easier.

Counting the number of occurrences in a list is an example of a common programing task. We can accomplish it with the count() method. For example, to count the number of times 13 appears in list1:

count_13 = list1.count(13)

We can also use a for loop to iterate over the whole list:

for x in list2:
    print(list1.count(x)) #This is for python version 3 and up

or for python versions older than 3:

for x in list2:
    print list1.count(x)

Upvotes: 0

LycuiD
LycuiD

Reputation: 2575

visited = []
for i in list2:
  if i not in visited:
    print "Number", i, "is presented", list1.count(i), "times in list1"
    visited.append(i)

Upvotes: 6

picmate 涅
picmate 涅

Reputation: 4249

You don't need to remove duplicates. When you add to a dictionary, automatically, the duplicates will be considered as single values.

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]
counts = {s:list1.count(s) for s in list1}
print counts

{2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}

Upvotes: 1

SuperNova
SuperNova

Reputation: 27456

You can also use operator

>>> list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16],
>>> list2 = [13, 19, 2, 16, 6, 5, 20, 21]

>>> import operator
>>> for s in list2:
...    print s, 'appearing in :',  operator.countOf(list1, s)

Upvotes: 0

Martin Gottweis
Martin Gottweis

Reputation: 2739

Simplest, easiest to understand, no-magic-approach is to create an object(associative array) and just count the numbers in list1:

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]

frequency_list = {}

for l in list1:
    if l in frequency_list:
        frequency_list[l] += 1
    else:
        frequency_list[l] = 1

print(frequency_list)

prints out this:

{
    16: 2,
    2: 1,
    19: 3,
    20: 2,
    5: 1,
    6: 1,
    13: 4,
    21: 1
}

meaning 16 is there twice, 2 is there once...

Upvotes: 1

albert
albert

Reputation: 8583

The easiest way is to use a counter:

from collections import Counter
list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]
c = Counter(list1)
print(c)

giving

Counter({2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1})

So you can access the key-value-pairs of the counter representing the items and its occurrences using the same syntax used for acessing dicts:

for k, v in c.items():
    print('- Element {} has {} occurrences'.format(k, v))

giving:

- Element 16 has 2 occurrences
- Element 2 has 1 occurrences
- Element 19 has 3 occurrences
- Element 20 has 2 occurrences
- Element 5 has 1 occurrences
- Element 6 has 1 occurrences
- Element 13 has 4 occurrences
- Element 21 has 1 occurrences

Upvotes: 6

Related Questions