MacGenius
MacGenius

Reputation: 199

Count total number of occurrences of given list of integers in another

How do I count the number of times the same integer occurs?

My code so far:

def searchAlgorithm (target, array):
    i = 0 #iterating through elements of target list
    q = 0 #iterating through lists sublists via indexes
    while q < 4:
        x = 0 #counting number of matches
        for i in target:
            if i in array[q]:
                x += 1
            else:
               x == 0
        print(x)
        q += 1


a = [8, 12, 14, 26, 27, 28]
b = [[4, 12, 17, 26, 30, 45], [8, 12, 19, 24, 33, 47], [3, 10, 14, 31, 39, 41], [4, 12, 14, 26, 30, 45]]

searchAlgorithm(a, b)

The output of this is:

2
2
1
3

What I want to achieve is counting the number of times '1', '2' '3' matches occurs.

I have tried:

v = 0
if searchAlgorithm(a, b) == 2:
    v += 1
print(v)

But that results in 0

Upvotes: 0

Views: 2065

Answers (3)

MacGenius
MacGenius

Reputation: 199

Thanks to some for their helpful feedback, I have since come up a more simplified solution that does exactly what I want.

By storing the results of the matches in a list, I can then return the list out of the searchAlgorithm function and simple use .count() to count all the matches of a specific number within the list.

def searchAlgorithm (target, array):
    i = 0 
    q = 0
    results = []
    while q < 4:
        x = 0 #counting number of matches
        for i in target:
            if i in array[q]:
                x += 1
            else:
               x == 0
        results.append(x)
        q += 1
    return results

a = [8, 12, 14, 26, 27, 28]
b = [[4, 12, 17, 26, 30, 45], [8, 12, 19, 24, 33, 47], [3, 10, 14, 31, 39, 41], [4, 12, 14, 26, 30, 45]]

searchAlgorithm(a, b)

d2 = (searchAlgorithm(winNum, lotto).count(2))

Upvotes: 0

sshashank124
sshashank124

Reputation: 32197

You can use intersection of sets to find elements that are common in both lists. Then you can get the length of the sets. Here is how it looks:

num_common_elements = (len(set(a).intersection(i)) for i in b)

You can then iterate over the generator num_common_elements to use the values. Or you can cast it to a list to see the results:

print(list(num_common_elements))
[Out]: [2, 2, 1, 3]

If you want to implement the intersection functionality yourself, you can use the sum method to implement your own version. This is equivalent to doing len(set(x).intersection(set(y))

sum(i in y for i in x)

This works because it generates values such as [True, False, False, True, True] representing where the values in the first list are present in the second list. The sum method then treats the Trues as 1s and Falses as 0s, thus giving you the size of the intersection set

Upvotes: 1

Austin
Austin

Reputation: 26047

This is based on what I understand from your question. Probably you are looking for this:

from collections import Counter

def searchAlgorithm (target, array):
    i = 0 #iterating through elements of target list
    q = 0 #iterating through lists sublists via indexes
    lst = []
    while q < 4:
        x = 0 #counting number of matches
        for i in target:
            if i in array[q]:
                x += 1
            else:
               x == 0
        lst.append(x)
        q += 1
    print(Counter(lst))


a = [8, 12, 14, 26, 27, 28]
b = [[4, 12, 17, 26, 30, 45], [8, 12, 19, 24, 33, 47], [3, 10, 14, 31, 39, 41], [4, 12, 14, 26, 30, 45]]

searchAlgorithm(a, b)
# Counter({2: 2, 1: 1, 3: 1})

Upvotes: 0

Related Questions