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 nothing to do with sets - it stems from the fact that certain values in python are considered false, and all others true. And these semantics were introduced at a point where there was no explicit True/False, so the operators were defined in exact the way you observed. Consider this: "foo" or "bar" -> "foo" So - nothing to do with sets. Diez -- http://mail.python.org/mailman/listinfo/python-list