Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between 'and' and '&' with respect to python sets?

Tags:

python

set

I got very good help for question check if dictionary key has empty value . But I was wondering if there is a difference between and and & in python? I assume that they should be similar?

dict1 ={"city":"","name":"yass","region":"","zipcode":"",
   "phone":"","address":"","tehsil":"", "planet":"mars"}

whitelist = {"name", "phone", "zipcode", "region", "city",
             "munic", "address", "subarea"}

result = {k: dict1[k] for k in dict1.viewkeys() & whitelist if dict1[k]}
like image 491
hjelpmig Avatar asked May 22 '13 15:05

hjelpmig


2 Answers

and is a logical operator which is used to compare two values, IE:

> 2 > 1 and 2 > 3
True

& is a bitwise operator that is used to perform a bitwise AND operation:

> 255 & 1
1

Update

With respect to set operations, the & operator is equivalent to the intersection() operation, and creates a new set with elements common to s and t:

>>> a = set([1, 2, 3])
>>> b = set([3, 4, 5])
>>> a & b
set([3])

and is still just a logical comparison function, and will treat a set argument as a non-false value. It will also return the last value if neither of the arguments is False:

>>> a and b
set([3, 4, 5])
>>> a and b and True
True
>>> False and a and b and True
False

For what its worth, note also that according to the python docs for Dictionary view objects, the object returned by dict1.viewkeys() is a view object that is "set-like":

The objects returned by dict.viewkeys(), dict.viewvalues() and dict.viewitems() are view objects. They provide a dynamic view on the dictionary’s entries, which means that when the dictionary changes, the view reflects these changes.

...

dictview & other

Return the intersection of the dictview and the other object as a new set.

...

like image 168
Justin Ethier Avatar answered Nov 15 '22 10:11

Justin Ethier


  • and is logical and
  • & is bitwise and

logical and returns the second value if both values evaluate to true.

For sets & is intersection.

If you do:

In [25]: a = {1, 2, 3}

In [26]: b = {3, 4, 5}

In [27]: a and b
Out[27]: set([3, 4, 5])

In [28]: a & b
Out[28]: set([3])

This be because bool(a) == True and bool(b) == True so and returns the second set. & returns the intersection of the sets.

(set doc)

like image 45
tacaswell Avatar answered Nov 15 '22 11:11

tacaswell