Function to remove elements from a list working, but python hangs :((

Girish Sahani girish at cse.iitb.ac.in
Mon Jun 12 05:48:20 EDT 2006


Hey Bruno...you are seeing the wrong post :P...please ignore this and
check out the one with (corrected) appended at the end...
Also, i used the list comprehension thingy which u have given, but now the
problem is python just hangs if my list l4 contains around 50
pairs...considering its not that big a data, this shouldnt happen....
Should it??


> Girish Sahani wrote:
>> Hi,
>>  I am trying to convert a list of pairs (l4) to list l5 by removing
>> those
>> pairs from l4 which are not present in a third list called pairList.
>
>
>
>
>>  The following is a simplified part of the routine i have written.
>> However
>> it does not give the correct output. Please help!
>>  Its possible i have made a trivial mistke since i am a newbie.
>>
>> def getl5():
> <ot>
> Please avoid this kind of names : it's both meaningless (what the ... is
> 'l5', I wonder ???) and confusing (is it 'l5' or '15' ?)
>
> FWIW, read this:
> http://mindprod.com/jgloss/unmain.html
> </ot>
>>     l5 = []
>>     pairList = [[1,2],[3,4],[3,5],[3,6],[9,7],[8,9],[8,7],[7,9],[11,10]]
>
>>From a semantic POV, you should use tuples for pairs - not lists.
>
>>     l4 =
>> [[4,2],[4,7],[4,10],[4,12],[9,2],[9,7],[9,10],[9,12],[11,2],[11,7]]
>>     for pair in l4:
>>         if pair not in pairList:
> err... see below...
>>             element.remove(l4)
>>     l5.append(element)
> This is outside the for loop, so this would be executed only once (if
> the rest of the code was correct, of course...)
>
>>     print "l5 is",l5
>>
>
> You did not test this code, did you ?
>
>>>> getl5()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
>   File "/usr/tmp/python-961l_S.py", line 7, in getl5
> NameError: global name 'element' is not defined
>>>>
>
> The SimpleStupid(tm) way to do this is far more simple - at least if I
> understood your specifications:
>
> pairList = [(1,2),(3,4),(3,5),(3,6),(9,7),(8,9),(8,7),(7,9),(11,10)]
> l4 = [(4,2),(4,7),(4,10),(4,12),(9,2),(9,7),(9,10),(9,12),(11,2),(11,7)]
> l5 = [pair for pair in l4 if pair in pairList]
> print "l5 is : ", l5
>
> Now this is not necessarily the most efficient solution...
>
> --
> bruno desthuilliers
> python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
> p in 'onurb at xiludom.gro'.split('@')])"
> --
> http://mail.python.org/mailman/listinfo/python-list
>




More information about the Python-list mailing list