Elwin Estle wrote:

Tcl's list search command has the option to search for a list element
that matches a given regex.  Is there something similar in python?

Not using regexes.

If not, it seems like it should be fairly trivial for me to write my
own (just wondering if I would be re-inventing the wheel).

If all you want to do is match an exact string, then lists already have this:

>>> ['fe', 'fi', 'fo', 'fum'].index('fo')
2

If you want to match the start of the item:

def find_prefix(alist, prefix):
    for i, item in enumerate(alist):
        if item.startswith(prefix):
            return i
    raise ValueError('not found')

Or match a substring:

def find_substring(alist, substr):
    for i, item in enumerate(alist):
        if substr in item:
            return i
    raise ValueError('not found')

If all you want is *exact* matches, these will be much faster than a regex solution. If you want case-insensitive exact matches:

def find_exact(alist, target, insensitive=False):
    if insensitive:
        return alist.index(target)
    target = target.lower()
    for i, item in enumerate(alist):
        if item.lower() == target:
            return i
    raise ValueError('not found')


To match with a regex, something like this should work:

import re
def find_re(alist, prefix):
    for i, item in enumerate(alist):
        if re.search(prefix, item):
            return i
    raise ValueError('not found')

or use re.match to match a prefix instead.




--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to