You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python集合中&=运算符的作用及pycocotools代码示例解析

Python中set的&=运算符含义解析

核心含义

&=是Python集合的交集更新运算符,它会直接修改原集合,将其更新为原集合与右侧集合的交集——也就是只保留两个集合中都存在的元素,等价于ids = ids & other_set(但&=是原地修改,效率更高)。

结合你的测试代码分析

你的测试代码中:

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

fruits和cars是两个完全没有交集的集合,它们的交集是空集合,所以执行fruits &= cars后,fruits被更新为空集合,这就是你得到len:0结果的原因。

结合pycocotools的getImgIds代码分析

这段代码的作用是筛选出**同时包含所有指定类别(catIds)**的图片ID,&=在这里的逻辑非常关键:

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)
  1. 初始时ids是传入的图片ID集合(如果有传入imgIds)
  2. 遍历每个类别ID:
    • 若第一个类别且初始ids为空,则直接把该类别对应的所有图片ID集合赋值给ids
    • 否则,用&=取当前ids与该类别图片ID集合的交集,更新ids
  3. 每一次&=操作都在缩小ids的范围,最终ids中的图片ID必然存在于所有指定的类别中,完美实现了“获取包含所有指定类别的图片ID”的需求。

内容的提问来源于stack exchange,提问作者stackbiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:40:16