February 27th, 2006, 04:50 AM

Union and Intersection of lists
Hello,
Are there functions for obtaining the union and intersection of two lists or does it have to be coded?
Thanks for your help.
February 27th, 2006, 04:59 AM

I just found out that lists can be converted to sets and then using "and" their intersection can be obtained and using "or" their union, and finally "" for obtaining elements found in one set but not the other.
My question now is whether a set is the same as a list in python without redundant elements?
As I have mentioned in my next posting also, it seems that Union and Intersection are not working properly, so I have added this editing.
Last edited by sam_kh918; February 27th, 2006 at 03:33 PM.
Reason: Union and Intersection not working properly!
February 27th, 2006, 05:06 AM

Originally Posted by sam_kh918
I just found out that lists can be converted to sets and then using "and" their intersection can be obtained and using "or" their union, and finally "" for obtaining elements found in one set but not the other.
My question now is whether a set is the same as a list in python without redundant elements?
If by redundant you mean nonunique elements then yes.
grim
February 27th, 2006, 01:01 PM

Could either of you post some code? I don't even know what a set is, but I'd be interested in seeing how you got that done!
Thanks!
February 27th, 2006, 01:37 PM

Sure,
As far as I know, you can't get the union or intersection or the difference of the following list with functions
Code:
>>> a=[3,5,6,8,12]
>>> b=[4,5,9,12]
but if you convert them to sets as follows;
Code:
>>> f=set(a)
>>> g=set(b)
Now you can use "and", "or", and minus sign to get their intersection, union, and difference, repsectively;
Code:
>>> f and g
set([9, 4, 5, 12])
>>> f or g
set([8, 3, 12, 5, 6])
>>> fg
set([8, 3, 6])
Ok it seems that the Union and Intersections are not correct. "f and g" returns set b and "f or g" returns set a, for some reason!
Last edited by sam_kh918; February 27th, 2006 at 03:29 PM.
Reason: Intersection and Union are not correct!
February 27th, 2006, 01:43 PM

Forgot to mention that, in case you don't know, the main difference b/w a list and a set is the lack of redundancy in sets.
For example if
a=[3,4,6,8,8,8,12,14,14]
then
set(a)=[3,4,6,8,12,14]
February 27th, 2006, 02:31 PM

Also, that sets are unordered  that is, when you iterate over them you may get the contents in any order, and you can't do:
Code:
print myset[0]
or
myset[1:4]
 because there is no order, the set doesn't know which elements 0, 1 or 4 are or what is between them.
February 27th, 2006, 03:31 PM

Just wanted to emphasize that the Union and Intersection are not working as I thought, I have edited my previous posting.
February 27th, 2006, 06:16 PM

Code:
>>> import sets
>>> set1 = sets.Set([1,2,3,4])
>>> set2 = sets.Set([3,4,5,6])
>>> set1 & set2
Set([3, 4])
>>> set1  set2
Set([1, 2, 3, 4, 5, 6])
>>> set1  set2
Set([1, 2])
>>> set2  set1
Set([5, 6])
>>> set1 ^ set2
Set([1, 2, 5, 6])
there you have intersection, union, set difference (both ways) and symmetric difference.
oh, and just so you know. what you were doing before using "and" and "or" is a logical "and" (&&) and a logical "or" (). it returns the last object it needed to evaluate in order to determine the value of the logical statement. in the case of the "and" it returns the second one because both need to be true for a true. for the "or" it returns the first one because it is true and automatically makes the statement true.
Comments on this post
February 27th, 2006, 07:27 PM

Thansk alot for your help, that was very helpful.