Function to remove elements from a list not working

bruno at modulix onurb at xiludom.gro
Mon Jun 12 05:31:22 EDT 2006


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('@')])"



More information about the Python-list mailing list