On 08/22/10 12:50, Baba wrote:
level: beginners

I was trying to write simple code that compares 2 tuples and returns
any element in the second tuple that is not in the first tuple.

def tuples(t1, t2):
     result = []
     for b in t2:
         for a in t1:
             if b == a:
                 break
         else:
             result=result+[b,]
     return result

print tuples([0,5,6], [0,5,6,3,7])


the code works but i was surprised by the following: my understanding
was that an ELSE clause is part of an IF statement. Therefore it comes
at the same indentation as the IF statement.

The ELSE clause can be used either with an IF (as you know) or with a FOR loop, which is interpreted as "if this loop reached the end naturally instead of exiting via a BREAK statement, execute this block of code".

If you reach the end of t1 without having found a value (and then issuing a "break"), then the current value of t2 (b) should be appended to the result.

That said, unless order matters, I'd just use sets:

  def tuples(t1, t2):
    return list(set(t2)-set(t1))

which should have better performance characteristics for large inputs.

-tkc


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to