У меня есть два массива
A=[1,2,3,4,6,5,5,5,8,9,7,7,7] B=[1,5,7]
Если элементы B в A, выведите количество вхождений выход 1: 1 5: 3 7: 3
Пакет numpy_indexed имеет векторизованное решение этой проблемы (отказ от ответственности: я его автор):
import numpy_indexed as npi keys, counts = npi.count(A) counts = counts[npi.indices(keys, B)]
Вы пометили pandas, поэтому вот простое решение: Посчитайте все, затем верните только подмножество, которое перекрывается с элементами в B
pandas
B
import pandas as pd pd.Series(A).value_counts().reindex(B).to_dict() #{1: 1, 5: 3, 7: 3}
Для отсортированного массива вы можете придумать лучшие алгоритмы, которые работают быстрее, но в целом более простой и более естественный способ без использования библиотек будет
for i in B: ans = 0 for j in A: if i == j: ans += 1 print(i,':',ans)
оба вышеуказанных ответа сработали.
Я использовал счетчик, так как B имел все элементы A
import collections c = collections.Counter(A) print(c)
Питонический путь:
>>> import collections >>> a= [1,2,3,4,6,5,5,5,8,9,7,7,7] >>> b = [1,5,7] >>> counter = collections.Counter(a) >>> {x:counter[x] for x in b} {1: 1, 5: 3, 7: 3} >>>