Подсчитать общее количество вхождений данного списка целых чисел в другой - PullRequest
0 голосов
/ 12 мая 2018

Как подсчитать, сколько раз встречается одно и то же целое число?

Пока мой код:

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)

Вывод этого:

2
2
1
3

Чего я хочу добиться, так это подсчета количества совпадений '1', '2' и '3'.

Я пытался:

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

Но это приводит к 0

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

Это основано на том, что я понимаю из вашего вопроса.Вероятно, вы ищете это:

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})
0 голосов
/ 13 мая 2018

Спасибо некоторым за их полезные отзывы, с тех пор я придумал более упрощенное решение, которое делает именно то, что я хочу.

Сохраняя results совпадений в списке, я могу затем вернуть список из функции searchAlgorithm и просто использовать .count() для подсчета всех совпадений определенного числа в списке.

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))
0 голосов
/ 12 мая 2018

Вы можете использовать пересечение множеств, чтобы найти элементы, которые являются общими в обоих списках.Тогда вы можете получить длину наборов.Вот как это выглядит:

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

Затем вы можете перебрать генератор num_common_elements, чтобы использовать значения.Или вы можете привести его к списку, чтобы увидеть результаты:

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

Если вы хотите реализовать функцию пересечения самостоятельно, вы можете использовать метод sum для реализации своей собственной версии.Это эквивалентно len(set(x).intersection(set(y))

sum(i in y for i in x)

. Это работает, поскольку генерирует такие значения, как [True, False, False, True, True], представляющие, где значения в первом списке присутствуют во втором списке.Затем метод sum обрабатывает True s как 1 с, а False s как 0, что дает вам размер набора пересечений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...