Thanks for the help. This is the final script: #!/usr/bin/env python import os import sys import time import string import pexpect import commands
# Test if the words of list2 elements appear in any order in list1 elements # disregarding case and parens # Reference list list1 = ["a b C (D)", "D A B", "A B E"] # Test list list2 = ["A B C D", "A B D", "A E F", "A (E) B", "A B", "E A B" ] def normalize(text, unwanted = "()", table = string.maketrans(string.ascii_uppercase,string.ascii_lowercase)): text.translate(table,unwanted) return set(text.split()) reflist = [normalize(element) for element in list1] print reflist #This is the list of sets to test against def testmember(element): """is element a member of the reflist, according to the above rules?""" testelement = normalize(element) #brute force comparison until match - depends on small reflist for el in reflist: if el.issuperset(testelement): return True return False for element in list2: print element, testmember(element) the trouble is it throws up the following error for set: $ ./test.py Traceback (most recent call last): File "./test.py", line 23, in ? reflist = [normalize(element) for element in list1] File "./test.py", line 20, in normalize return set(text.split()) NameError: global name 'set' is not defined when I checked http://docs.python.org/lib/genindex.html#letter-s it said that set() (built-in function) The python I use is the one that comes with cygwin. Does anybody know if the following version of python is incomplete or do I need to call built in functions in a different way? $ python Python 2.3.4 (#1, Jun 13 2004, 11:21:03) [GCC 3.3.1 (cygming special)] on cygwin Type "help", "copyright", "credits" or "license" for more information. Michael Spencer <[EMAIL PROTECTED]> wrote: > > Steve Holden wrote: > > Mark Devine wrote: > > > >> Actually what I want is element 'class-map match-all cmap1' from list > >> 1 to match 'class-map cmap1 (match-all)' or 'class-map cmap1 mark > >> match-all done' in list 2 but not to match 'class-map cmap1'. > >> Each element in both lists have multiple words in them. If all the > >> words of any element of the first list appear in any order within any > >> element of the second list I want a match but if any of the words are > >> missing then there is no match. There are far more elements in list 2 > >> than in list 1. > >> > > > sounds like a case for sets... > > >>> # NB Python 2.4 > ... > >>> # Test if the words of list2 elements appear in any order in list1 > elements > >>> # disregarding case and parens > ... > >>> # Reference list > >>> list1 = ["a b C (D)", > ... "D A B", > ... "A B E"] > >>> # Test list > >>> list2 = ["A B C D", #True > ... "A B D", #True > ... "A E F", #False > ... "A (E) B", #True > ... "A B", #True > ... "E A B" ] > ... > >>> def normalize(text, unwanted = "()"): > ... conv = "".join(char.lower() for char in text if char not in > unwanted) > ... return set(conv.split()) > ... > >>> reflist = [normalize(element) for element in list1] > >>> print reflist > ... > [set(['a', 'c', 'b', 'd']), set(['a', 'b', 'd']), set(['a', 'b', 'e'])] > > This is the list of sets to test against > > > >>> def testmember(element): > ... """is element a member of the reflist, according to the above > rules?""" > ... testelement = normalize(element) > ... #brute force comparison until match - depends on small reflist > ... for el in reflist: > ... if el.issuperset(testelement): > ... return True > ... return False > ... > >>> for element in list2: > ... print element, testmember(element) > ... > A B C D True > A B D True > A E F False > A (E) B True > A B True > E A B True > >>> > > Michael > > -- > http://mail.python.org/mailman/listinfo/python-list > _________________________________________________________________ Sign up for eircom broadband now and get a free two month trial.* Phone 1850 73 00 73 or visit http://home.eircom.net/broadbandoffer -- http://mail.python.org/mailman/listinfo/python-list