вы можете использовать collections.Counter
и выполнять итерации по data
в последовательных парах:
import numpy as np
from collections import Counter
a = [1,2,3,4,5]
b = [5,2,3,6,7]
c = [5,2,3,8,9]
data = np.array([a,b,c]).flatten()
c = Counter(zip(data, data[1:]))
print(c.most_common(1))
# [((2, 3), 3)]
говорю вам, что (2, 3)
произошло 3 раза.
немного подробнее:
data[1:]
это ваш data
без первого элемента.
zip(data, data[1:])
zip
затем используется для генерации последовательных пар (как tuples
)
(1, 2), (2, 3), (3, 4), (4, 5), (5, 5), (5, 2), (2, 3), ...
Counter
затем просто подсчитывает, сколько раз появляются и сохраняет их dict
-подобно:
Counter({(2, 3): 3, (5, 2): 2, (1, 2): 1, (3, 4): 1, (4, 5): 1, (5, 5): 1, (3, 6): 1,
(6, 7): 1, (7, 5): 1, (3, 8): 1, (8, 9): 1})
обновление: если вам не нужны пары из другого списка, вы можете сделать это:
data = (a, b, c)
c = Counter()
for d in data:
c.update(zip(d, d[1:]))
print(c)
или напрямую:
c = Counter(pair for d in data for pair in zip(d, d[1:]))