Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python set Union and set Intersection operate differently?

I'm doing some set operations in Python, and I noticed something odd..

>> set([1,2,3]) | set([2,3,4]) set([1, 2, 3, 4]) >> set().union(*[[1,2,3], [2,3,4]]) set([1, 2, 3, 4]) 

That's good, expected behaviour - but with intersection:

>> set([1,2,3]) & set([2,3,4]) set([2, 3]) >> set().intersection(*[[1,2,3], [2,3,4]]) set([]) 

Am I losing my mind here? Why isn't set.intersection() operating as I'd expect it to?

How can I do the intersection of many sets as I did with union (assuming the [[1,2,3], [2,3,4]] had a whole bunch more lists)? What would the "pythonic" way be?

like image 755
Bilal Akil Avatar asked Oct 25 '13 04:10

Bilal Akil


People also ask

What is set explain with its intersection union and difference in Python?

Intersection: Elements two sets have in common. Union: All the elements from both sets. Difference: Elements present on one set, but not on the other. Symmetric Difference: Elements from both sets, that are not present on the other.

Can a Python set have different types?

Set elements are unique. Duplicate elements are not allowed. A set itself may be modified, but the elements contained in the set must be of an immutable type.

Do Python sets have a union operation?

Python Set union() MethodThe union() method returns a set that contains all items from the original set, and all items from the specified set(s). You can specify as many sets you want, separated by commas.


1 Answers

When you do set() you are creating an empty set. When you do set().intersection(...) you are intersecting this empty set with other stuff. The intersection of an empty set with any other collection of sets is empty.

If you actually have a list of sets, you can get their intersection similar to how you did it.

>>> x = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}] >>> set.intersection(*x) set([3]) 

You can't do this directly with the way you're doing it, though, because you don't actually have any sets at all in your example with intersection(*...). You just have a list of lists. You should first convert the elements in your list to sets. So if you have

x = [[1,2,3], [2,3,4]] 

you should do

x = [set(a) for a in x] 
like image 133
BrenBarn Avatar answered Sep 30 '22 13:09

BrenBarn