Globbing in List Search?

Peter Otten __peter__ at web.de
Thu Mar 25 08:31:08 CET 2004


Ed Suominen wrote:

> k = x.index(filter(lambda x: x.startswith(term), x)[0])
> 
> where "term" acts like it has an implicit "*" at the end.
> 
> Any better ideas?
> 
> Ed Suominen wrote:
> 
>> Does Python have a globbing-type list search capability, like "lsearch
>> -glob $list" in TCL?

The glob module has a reference to fnmatch, which should meet your needs:

>>> names = ["axb", "asowhatb", "abc"]

Find all matches:

>>> fnmatch.filter(names, "a*b")
['axb', 'asowhatb']


Find all matching indices:

>>> [i for (i, n) in enumerate(names) if fnmatch.fnmatch(n, "a*b")]
[0, 1]

Find first matching index or -1:
 
>>> def index(names, pattern):
...     for i, n in enumerate(names):
...             if fnmatch.fnmatch(n, pattern):
...                     return i
...     return -1
...
>>> index(names, "a*b")
0
>>> index(names, "a*x")
-1
>>>

Peter




More information about the Python-list mailing list