示例#1
0
    def inter(self, right):
        """Intersection: returns a Set holding objects appearing in both sets
        """

        assert isinstance(right, self.__class__)
        if len(right.data)==0: return self.copy()
        if len(self.data)==0: return right.copy()
        l1 = self
        l2 = right
        if len(l1.data) > len(right.data):
            l1 = right
            l2 = self
        # l1 is always shorter list
        for o in l2.data: o._setFlag = 0
        for o in l1.data: o._setFlag = 1
        newlist = [x for x in l2.data if x._setFlag==1]
        for o in l2.data:
            if hasattr(o, '_setFlag'):
                del o._setFlag
        for o in l1.data:
            if hasattr(o, '_setFlag'):
                del o._setFlag
        stringRepr = None
        if self.stringRepr and right.stringRepr:
            stringRepr = self.stringRepr+'/&/'+right.stringRepr
        elif verbose:
            import traceback
            traceback.print_stack()
            print(('intersecting sets with no stringRepr:', repr(self), repr(right)))
            stringRepr = None
        return self.__class__(misc.uniq(newlist), stringRepr=stringRepr)
示例#2
0
    def inter(self, right):
        """Intersection: returns a Set holding objects appearing in both sets
        """

        assert isinstance(right, self.__class__)
        if len(right.data) == 0: return self.copy()
        if len(self.data) == 0: return right.copy()
        l1 = self
        l2 = right
        if len(l1.data) > len(right.data):
            l1 = right
            l2 = self
        # l1 is always shorter list
        for o in l2.data:
            o._setFlag = 0
        for o in l1.data:
            o._setFlag = 1
        newlist = [x for x in l2.data if x._setFlag == 1]
        for o in l2.data:
            if hasattr(o, '_setFlag'):
                del o._setFlag
        for o in l1.data:
            if hasattr(o, '_setFlag'):
                del o._setFlag
        stringRepr = None
        if self.stringRepr and right.stringRepr:
            stringRepr = self.stringRepr + '/&/' + right.stringRepr
        elif verbose:
            import traceback
            traceback.print_stack()
            print(('intersecting sets with no stringRepr:', repr(self),
                   repr(right)))
            stringRepr = None
        return self.__class__(misc.uniq(newlist), stringRepr=stringRepr)
示例#3
0
    def union(self, right):
        """Union: returns a Set holding objects appearing in either list"""

        assert isinstance(right, self.__class__)
        stringRepr = None
        if len(right.data)==0: return self.copy()
        if len(self.data)==0: return right.copy()
        if self.stringRepr and right.stringRepr:
            if self.stringRepr == right.stringRepr:
                stringRepr = self.stringRepr
            else:
                stringRepr = self.stringRepr+'/|/'+right.stringRepr
        elif verbose:
            import traceback
            traceback.print_stack()
            print(('union of sets with no stringRepr:', repr(self), repr(right)))
            stringRepr = None
        return self.__class__( misc.uniq(self.data + right.data),
                              stringRepr=stringRepr )
示例#4
0
    def union(self, right):
        """Union: returns a Set holding objects appearing in either list"""

        assert isinstance(right, self.__class__)
        stringRepr = None
        if len(right.data)==0: return self.copy()
        if len(self.data)==0: return right.copy()
        if self.stringRepr and right.stringRepr:
            if self.stringRepr == right.stringRepr:
                stringRepr = self.stringRepr
            else:
                stringRepr = self.stringRepr+'/|/'+right.stringRepr
        elif verbose:
            import traceback
            traceback.print_stack()
            print 'union of sets with no stringRepr:', repr(self), repr(right)
            stringRepr = None
        return self.__class__( misc.uniq(self.data + right.data),
                              stringRepr=stringRepr )