What does the &= operator do in the python set() class

Question:

Here is the getImgIds from the pycocotools:

pycocotools/coco.py:

def getImgIds(self, imgIds=[], catIds=[]):
    '''
    Get img ids that satisfy given filter conditions.
    :param imgIds (int array) : get imgs for given ids
    :param catIds (int array) : get imgs with all given cats
    :return: ids (int array)  : integer array of img ids
    '''
    imgIds = imgIds if _isArrayLike(imgIds) else [imgIds]
    catIds = catIds if _isArrayLike(catIds) else [catIds]

    if len(imgIds) == len(catIds) == 0:
        ids = self.imgs.keys()
    else:
        ids = set(imgIds)
        for i, catId in enumerate(catIds):
            if i == 0 and len(ids) == 0:
                ids = set(self.catToImgs[catId])
            else:
                ids &= set(self.catToImgs[catId])
    return list(ids)

Here is the test code for simulating the value of ids &= set(self.catToImgs[catId]):

fruits = set(['apple', 'banana', 'cherry'])
cars = set(['Ford', 'BMW', 'Volvo'])
fruits &= cars
print("fruits: len:{}, type: {}, values: {}".format(
    len(fruits), type(fruits), fruits
))

Here is the result:

fruits: len:0, type: <class 'set'>, values: set()

I got a result of len = 0.

How to understand the meaning of the above &= operator for the set() class?

Asked By: stackbiz

||

Answers:

This might be useful : https://python-reference.readthedocs.io/en/latest/docs/sets/op_intersection.html

In other words, & is the "bitwise and" operator. With the syntax &=, you have a &= b that is equivalent to a = a & b. For sets, it is the intersection of the two sets (as explained in the documentation linked above).

If no elements are common in both sets, it will return an empty set.

Answered By: Cairoknox
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.