'Intersection is the minimum of corresponding counts.
>>> Counter(\'abbb\') & Counter(\'bcc\')
Counter({\'b\': 1})'

def __and__(self, other):

    if (not isinstance(other, Counter)):
        return NotImplemented
    _min = min
    result = Counter()
    if (len(self) < len(other)):
        (self, other) = (other, self)
    for elem in filter(self.__contains__, other):
        newcount = _min(self[elem], other[elem])
        if (newcount > 0):
            result[elem] = newcount
    return result
