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

Discussion in 'Python' started by Mark Devine, Dec 17, 2004.

  1. Mark Devine

    Mark Devine Guest

    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 <> 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
     
    Mark Devine, Dec 17, 2004
    #1
    1. Advertising

  2. Mark Devine

    Peter Otten Guest

    Mark Devine 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:


    In my book it is not working then.

    > def normalize(text, unwanted = "()", table =
    > string.maketrans(string.ascii_uppercase,string.ascii_lowercase)):
    > text.translate(table,unwanted)


    Strings are immutable in Python. Make that

    text = text.translate(table, unwanted)

    This line of the script's output could have given you a clue:

    > [Set(['a', 'C', 'b', '(D)']), Set(['A', 'B', 'D']), Set(['A', 'B', 'E'])]


    (I didn't look any further, so there may be other problems)

    Peter

    PS: Do us a favour and (a) don't top-post (b) use space not tabs in your
    source code (c) remove all text quoted from the parent that is not relevant
    to your current problem.
     
    Peter Otten, Dec 17, 2004
    #2
    1. Advertising

  3. Mark Devine

    Steve Holden Guest

    Mark Devine 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:
    >

    Well, that's a pretty unusual interpretation of the word "working" :)

    > [...]


    I see from later postings you are getting closer to an answer, but
    obviously you still have to strip out the characters that you don't want
    to affect the match (such as "(" and ")").

    regards
    Steve
    --
    Steve Holden http://www.holdenweb.com/
    Python Web Programming http://pydish.holdenweb.com/
    Holden Web LLC +1 703 861 4237 +1 800 494 3119
     
    Steve Holden, Dec 17, 2004
    #3
  4. Mark Devine

    Steve Holden Guest

    Mark Devine 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:
    >

    Well, that's a pretty unusual interpretation of the word "working" :)

    > [...]


    I see from later postings you are getting closer to an answer, but
    obviously you still have to strip out the characters that you don't want
    to affect the match (such as "(" and ")").

    regards
    Steve
    --
    Steve Holden http://www.holdenweb.com/
    Python Web Programming http://pydish.holdenweb.com/
    Holden Web LLC +1 703 861 4237 +1 800 494 3119
     
    Steve Holden, Dec 17, 2004
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mark Devine
    Replies:
    2
    Views:
    293
    Mike Meyer
    Dec 16, 2004
  2. Mark Devine
    Replies:
    6
    Views:
    313
    Michael Spencer
    Dec 17, 2004
  3. Mark Devine
    Replies:
    1
    Views:
    360
    Steven Bethard
    Dec 17, 2004
  4. robin
    Replies:
    10
    Views:
    556
    Dave Hansen
    Apr 12, 2006
  5. =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==

    List of lists of lists of lists...

    =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 8, 2006, in forum: Python
    Replies:
    5
    Views:
    433
    =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==
    May 15, 2006
Loading...

Share This Page