I am doing an assignment, which requires me to do a code walkthrough. I would like to have a brief description on how set().union(*list1) works so i can answer during my walkthrough.
list1 = [[1,2,3],[1,2,3,5,8]]
x = set().union(*list1)
print(list(x))
#output = [1, 2, 3, 5, 8]
From the docs: https://docs.python.org/3/library/stdtypes.html#frozenset.union
union(*others)
set | other | ...
Return a new set with elements from the set and all others.
Also *list
is called list unpacking, where we get the two sublists inside the list
In [37]: list1 = [[1,2,3],[1,2,3,5,8]]
In [38]: print(*list1)
[1, 2, 3] [1, 2, 3, 5, 8]
So the code you ran essentially creates a union of all the sublists within the list x
, and since you know that the union of set [1,2,3]
and [1,2,3,5,8]
is [1,2,3,5,8]
, hence the expected result.
Note that this is equivalent to list(set([1,2,3]).union(set([1,2,3,5,8])))
where we are doing a.union(b)
, a
and b
being sets
In [31]: list1 = [[1,2,3],[1,2,3,5,8]]
...:
...: x = set().union(*list1)
In [32]: print(list(x))
[1, 2, 3, 5, 8]
In [33]: print(list(set([1,2,3]).union(set([1,2,3,5,8]))))
[1, 2, 3, 5, 8]
Adding to this, a better approach to do union
or even intersection
might be to convert the list of lists to a list of sets, using map(set,list1)
, unrolling the sets and then doing the operations
In [39]: list1 = [[1,2,3],[1,2,3,5,8]]
In [40]: print(set.intersection(*map(set,list1)))
{1, 2, 3}
In [41]: print(set.union(*map(set,list1)))
{1, 2, 3, 5, 8}