-2

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?

stackbiz
  • 1,136
  • 1
  • 5
  • 22

1 Answers1

5

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.

Tomerikoo
  • 18,379
  • 16
  • 47
  • 61
Cairoknox
  • 188
  • 9
  • 4
    Referencing an unofficial site that says *"Everything here is intended for Python 2.7.X. [...] Python 3.X is not catching up - there’s like seven or eight people using it worldwide"*... I'm not convinced that's the best idea. – Kelly Bundy Aug 21 '22 at 11:53
  • 3
    Also, it's not really "bitwise" and is [not equivalent](https://tio.run/##K6gsycjPM7YoKPr/P1HBViEZiKsNa7mSQLRRLVeigpqtQhJXQVFmXolGsiYXF3ZFtgpAhUjq/v8HAA) to `a = a & b`. – Kelly Bundy Aug 21 '22 at 11:55
  • You are right. Although, I could argue that low effort questions deserve low effort answers. That said, I could have been more thoughtful. Good day! – Cairoknox Aug 21 '22 at 12:25