The operators in and not in test for set membership. x in
s evaluates to true if x is a member of the set
s, and false otherwise. x not in s returns
the negation of x in s.
The set membership test has traditionally been bound to
sequences; an object is a member of a set if the set is a sequence
and contains an element equal to that object. However, it is
possible for an object to support membership tests without being a
sequence. In particular, dictionaries support membership testing as
a nicer way of spelling dict.has_key(key); other
mapping types may follow suit.
For the list and tuple types, x in y is true if and
only if there exists an index i such that x == y[i] is true.
For the Unicode and string types, x in y is true if
and only if x is a substring of y. An equivalent
test is y.find(x) != -1. Note, x and y need not
be the same type; consequently, u'ab' in 'abc' will
return true. Empty strings are always considered to be a substring
of any other string, so "" in "abc" will return true. Changed in
version 2.3: Previously, x was required to be a string of
length 1.
For user-defined classes which define the __contains__ method, x in y
is true if and only if y.__contains__(x) is true.
For user-defined classes which do not define __contains__ and do define __getitem__, x in
y is true if and only if there is a non-negative integer
index i such that x == y[i], and all lower integer
indices do not raise
IndexError exception. (If any other exception is raised, it is
as if in raised that exception).
The operator not in is defined to have the inverse true value of in.