In [1]:
t = 'haystack needle haystack' # "text" - thing we search in
p = 'needle' # "pattern" - thing we search for
In [2]:
def naive(p, t):
    assert len(p) <= len(t)  # assume text at least as long as pattern
    occurrences = []
    for i in range(len(t)-len(p)+1):  # for each alignment of p to t
        match = True  # assume we match until proven wrong
        for j in range(len(p)):  # for each position of p
            if t[i+j] != p[j]:
                match = False  # at least 1 char mismatches
                break
        if match:
            occurrences.append(i)
    return occurrences
In [3]:
naive(p, t)
Out[3]:
[9]
In [4]:
t[9:9+len(p)]  # confirm it really occurs
Out[4]:
'needle'
In [5]:
naive('needle', 'needleneedleneedle')
Out[5]:
[0, 6, 12]