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.
asked Sep 19, 2016 at 18:02 39 1 1 silver badge 3 3 bronze badges This post might be a good place to start stackoverflow.com/questions/2600191/… Commented Sep 19, 2016 at 18:26The 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)
Counter()
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))
- 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
answered Sep 19, 2016 at 18:08
8,513 11 11 gold badges 57 57 silver badges 86 86 bronze badges
visited = [] for i in list2: if i not in visited: print "Number", i, "is presented", list1.count(i), "times in list1" visited.append(i)
answered Sep 19, 2016 at 18:05
2,565 1 1 gold badge 20 20 silver badges 28 28 bronze badges
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:
meaning 16 is there twice, 2 is there once.
answered Sep 19, 2016 at 18:10 Martin Gottweis Martin Gottweis 2,739 15 15 silver badges 27 27 bronze badgesA much more compact version of this is to have for item in list1: frequency_list[item] = frequency_list.get(item, 0) + 1 . I don't know whether you consider that "magical" but I do actually prefer it for clean code. I guess it does take a little bit more understanding, so maybe just a matter of opinion :)
Commented Sep 19, 2016 at 18:19 @roganjosh: nice. I just thought that a newbie question requires a newbie answer ;-) Commented Sep 19, 2016 at 18:22How interesting. I started using my suggestion after seeing it in a vid by Hettinger around 24:25 mark. I decided to test and your approach was consistently faster by a reasonable margin.
Commented Sep 19, 2016 at 18:33You 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 = print countsanswered Sep 19, 2016 at 20:35 4,179 5 5 gold badges 48 48 silver badges 52 52 bronze badges
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)
answered Sep 19, 2016 at 18:16
27.1k 7 7 gold badges 95 95 silver badges 69 69 bronze badges
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)