find all index positions

vbgunz vbgunz at gmail.com
Fri May 12 17:45:43 CEST 2006


Hello John,

Thank you very much for your pointers! I decided to redo it and try to
implement your suggestion. I think I did a fair job and because of your
suggestion have a better iterator. Thank you!

def indexer(string, substring, overlap=1):
    '''indexer(string, substring, [overlap=1]) -> int

    indexer takes a string and searches it to return all substring
    indexes. by default indexer is set to overlap all occurrences.
    to get the index to whole words only, set the overlap argument
    to the length of the substring. The only pitfall to indexer is
    it will return the substring whether it stansalone or not.

    >>> list(indexer('ababababa', 'aba'))
    [0, 2, 4, 6]

    >>> list(indexer('ababababa', 'aba', len('aba')))
    [0, 4]

    >>> list(indexer('ababababa', 'xxx'))
    []

    >>> list(indexer('show chow', 'how'))
    [1, 6]
    '''

    index = string.find(substring)
    if index != -1:
        yield index

    while index != -1:
        index = string.find(substring, index + overlap)
        if index == -1: continue
        yield index

if __name__ == '__main__':
    print list(indexer('ababababa', 'aba'))  # -> [0, 2, 4, 6]
    print list(indexer('ababababa', 'aba', len('aba')))  # -> [0, 4]
    print list(indexer('ababababa', 'xxx'))  # -> []
    print list(indexer('show chow', 'how'))  # -> [1, 6]




More information about the Python-list mailing list