create lowercase strings in lists - was: (No subject)

Mark Devine markdevine at eircom.net
Fri Dec 17 11:31:14 CET 2004


If I use:
if el.issubset(testelement):
I get a closer anwser but the brackets cause a problem. They are optional in the test list so (D) in the test list is equal to D or (D) in the reference list. 



"Mark Devine" <markdevine at eircom.net> wrote:

> 
> I got the script working. Thanks for all your help everyone. Trouble is its not showing the correct results. Here is the script and results:
> 
> #!/usr/bin/env python
> import os
> import sys
> import time
> import string
> import pexpect
> import commands
> from sets import Set as set
> 
> 
> # 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)
> 
> Here is the results:
> 
> $ ./test.py
> [Set(['a', 'C', 'b', '(D)']), Set(['A', 'B', 'D']), Set(['A', 'B', 'E'])]
> A B C D False
> A B D True
> A E F False
> A (E) B False
> A B True
> E A B True
> 
> The results should be:
> 
> > A B C D True
> > A B D True
> > A E F False
> > A (E) B True
> > A B False
> > E A B True
> 
> 
> 
> 
> 
> Michael Spencer <mahs at telcopartners.com> 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
> 



_________________________________________________________________
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





More information about the Python-list mailing list