Поиск паттерна в списке [ ] ((a = j + l) - не фунциклирует?))

InjunJoe

Новичок
Пользователь
Ноя 3, 2020
26
0
1
Москва
Код:
Rezultat = [15,10,10,10,11,10,11,15,10,10,11,10,11,15,10,11,10,10,11]
Pattern = [10,11]
rezult = []
pat = 000
count = 0
j = 0
a = 0
l = len(Pattern)
for i in range(len(Rezultat)):
    rezult.append(Rezultat[i])
print(rezult)
for j in range(a, len(rezult)):
    if rezult[j] == Pattern[0]:
        count += 1
        for g in range(1, len(Pattern)):
            if Pattern[g] == rezult[j + g]:
                count += 1
            if Pattern[g] != rezult[j + g]:
                count = 0
                break
            if count == l:
                rezult.insert(j + l, pat)
                n = len(Pattern) + 1
                a = j + l
                break
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 668
475
83
я так понял что нужно проверить сколько раз список Pattern входит в список Rezultat, можно так:
Python:
Rezultat = [15, 10, 10, 10, 11, 10, 11, 15, 10, 10, 11, 10, 11, 15, 10, 11, 10, 10, 11]
Pattern = [10, 11]
count = 0
for index_Resultat, item_Resultat in enumerate(Rezultat):
    try:
        if Pattern[0] == Rezultat[index_Resultat] and Pattern[1] == Rezultat[index_Resultat + 1]:
            count += 1
    except IndexError:
        break

print('Кол-во вхождений -', count)
можно еще сделать через регулярки, но я в них не силен...
 
Последнее редактирование:

InjunJoe

Новичок
Пользователь
Ноя 3, 2020
26
0
1
Москва
Да, только вопрос если len(Pattern) будет больше чем 2 ... и более тогда как?

(а у меня в коде вопрос почему 24 строчка a = j + l т.е. а - не переноситься в сам цикл для начало отсчета? (т.е как сделать чтобы с 24 строки значение = а подставилось в цикл?)
 

InjunJoe

Новичок
Пользователь
Ноя 3, 2020
26
0
1
Москва
23 строчка не нужна = del
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 668
475
83
вроде работает
Python:
Rezultat = [15, 10, 10, 10, 11, 10, 11, 12, 15, 10, 10, 11, 10, 11, 15, 10, 11, 10, 10, 11]
Pattern = [10, 11]
tmp_Rezultat = [Rezultat[i:i + len(Pattern)] for i in range(0, len(Rezultat), len(Pattern) - (len(Pattern) - 1))]

count = 0
for i in tmp_Rezultat:
    if Pattern == i:
        count += 1

print('Кол-во вхождений -', count)
tmp_Rezultat = [Rezultat[i:i + len(Pattern)] for i in range(0, len(Rezultat), len(Pattern) - (len(Pattern) - 1))] - здесь мы разбиваем список на более маленькие списки, длина которых равна длине списка Pattern, если длина Pattern = 2, то список tmp_Rezultat будет такой (пишу индексы элементов):
[[0, 1], [1, 2], [2, 3], [3, 4] ... и так далее]
 
Последнее редактирование:

InjunJoe

Новичок
Пользователь
Ноя 3, 2020
26
0
1
Москва
Благодарю!
 

Форум IT Специалистов