# boolean operations on sets

Steve Holden steve at holdenweb.com
Mon Aug 6 17:26:48 CEST 2007

```Flavio wrote:
> Hi, I have been playing with set operations lately and came across a
> kind of surprising result given that it is not mentioned in the
> standard Python tutorial:
>
> with python sets,   intersections  and unions are supposed to be done
> like this:
> In [7]:set('casa') & set('porca')
> Out[7]:set(['a', 'c'])
>
> In [8]:set('casa') | set('porca')
> Out[8]:set(['a', 'c', 'o', 'p', 's', 'r'])
>
> and they work correctly. Now what is confusing is that if you do:
>
> In [5]:set('casa') and set('porca')
> Out[5]:set(['a', 'p', 'c', 'r', 'o'])
>
> In [6]:set('casa') or set('porca')
> Out[6]:set(['a', 'c', 's'])
>
> The results are not what you would expect from an AND  or OR
> operation, from the mathematical point of view! aparently the "and"
> operation is returning the the second set, and the "or" operation is
> returning the first.
>
> If python developers wanted these operations to reflect the
> traditional (Python) truth value for data structures: False for empty
> data structures and True otherwise, why not return simply True or
> False?
>
> So My question is: Why has this been implemented in this way? I can
> see this confusing many newbies...
>
it has been implemented in this way to conform with the definitions of
"and" and "or", which have never been intended to apply to set
operations. The result of these operations has always returned one of
the operands in the case where possible, and they continue to do so with
set operands.

regards
Steve
--
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------

```