Casey <[EMAIL PROTECTED]> wrote: > I would recommend the OP try this: > > run the (I)python shell and try the following: > >>>> a = [x for x in "abcdefg"] >>>> a > ['a','b','c','d','e','f','g'] >>>> "c" in a > True >>>> "c" in a == True > False >>>> ("c" in a) == True > True > > The reason your conditional failed is that it was interpreted as "c" > in (a == True) which is False.
That was my first thought, too. But watch: >>> a = list("abcde") >>> a ['a', 'b', 'c', 'd', 'e'] >>> "c" in (a == True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'bool' is not iterable Then it dawned on me (is this the right phrase?): It's the same situation as e.g. x < y >= 1, which means the same as "x < y and y >= 1" (except that y is only evaluated once). So '"c" in a == True' gets evaluated as '"c" in a and a == True'. > the "==" operator binds at a higher precedence level than the "in" > operator, just as multiplication binds higher than addition Operator precedence plays no role in this case. It is a case of 'chained' comparisons. Hope that clears it up Marc -- http://mail.python.org/mailman/listinfo/python-list