Version 2 (modified by flip, 10 years ago) (diff)

--

Lambda operators to perform simple set operators

FYI, Python has a built-in set type which can provide these operations for you in a more self-documenting fashion. See examples below.

The Set has only been around since (I think) Python 2.4 so code (and examples) written for older versions of Python might not make use of them.

Examples using filter & lambda:

```        #Example of lambda for simple list AND, OR, XOR, UNION
list1=range(5) # [0,1,2,3,4]
list2=range(3,7) # [3,4,5,6]
union=list1+filter(lambda x:x not in list1,list2)
# union = [0,1,2,3,4,5,6]

Intersection is just as easy
intersection=filter(lambda x:x in list1,list2)
# intersection=[3,4]

Difference is the last thing you wanted...
difference=filter(lambda x:x not in list2,list1)
# difference=[0,1,2]

And my set vocabulary is rusty but the distinct elements or those from both lists that are NOT in common (un-intersection?) would be:
distinct=filter(lamba x:x not in list2,list1)+filter(lambda x:x not in list1,list2)
# distinct=[0,1,2,5,6]
```

Examples using Python's built-in set:

```    # Union
>>> list1=range(5) # [0,1,2,3,4]
>>> list2=range(3,7) # [3,4,5,6]
>>> union = set(list1).union(list2)
>>> print union
set([0, 1, 2, 3, 4, 5, 6])
>>> print list(union)
[0, 1, 2, 3, 4, 5, 6]

# Intersection
>>> intersection = set(list1).intersection(list2)
>>> print intersection
set([3, 4])
>>> print list(intersection)
[3, 4]

# Difference
>>> difference = set(list1) - set(list2)
>>> print difference
set([0, 1, 2])

# Symmetric difference
# Return a new set with elements in either the set or other but not both.
>>> symmetric_difference = set(list1).symmetric_difference(list2)
>>> print symmetric_difference
set([0, 1, 2, 5, 6])
>>>

```