[Python-ideas] exclusively1, common, exclusively2 = set1 - set2, set1 & set2, set2 - set1

Oscar Benjamin oscar.j.benjamin at gmail.com
Thu Jul 4 02:16:07 CEST 2013


On 3 July 2013 21:50, Paddy3118 <paddy3118 at gmail.com> wrote:
> I found myself repeating something that I know I have used before, several
> times: I get two sets of results, may be sets of the passing tests when a
> design has changed, and I need to work out what has changed so work out
>
> 1. What passed first time round
> 2. What passed both times.
> 3. What passed only the second time round.
>
> I usually use something like the set equations in the title to do this but I
> recognise that this requires both sets to be traversed at least three times
> which seems wasteful.
>
> I wondered if their was am algorithm to partition the two sets of data into
> three as above, but cutting down on the number of set traversals?

You can do it in one traversal of each set:

def partition(setx, sety):
    xonly, xandy, yonly = set(), set(), set()
    for set1, set2, setn in [(setx, sety, xonly), (sety, setx, yonly)]:
        for val in set1:
            if val in set2:
                xandy.add(val)
            else:
                setn.add(val)
    return xonly, xandy, yonly


Oscar


More information about the Python-ideas mailing list