Из документов: https://docs.python.org/3/library/stdtypes.html#frozenset.union
союз (* другие)
набор |другое |...
Возвращает новый набор с элементами из набора и всеми другими.
Также *list
называется распаковкой списка, где мы получаем два подсписка внутри списка
In [37]: list1 = [[1,2,3],[1,2,3,5,8]]
In [38]: print(*list1)
[1, 2, 3] [1, 2, 3, 5, 8]
Таким образом, код, который вы запустили, по существу создает объединение всех подсписков в списке x
, и поскольку вы знаете, что объединение множеств [1,2,3]
и [1,2,3,5,8]
равно [1,2,3,5,8]
, отсюда и ожидаемый результат.
Обратите внимание, что это эквивалентно list(set([1,2,3]).union(set([1,2,3,5,8])))
, где мы делаем a.union(b)
, a
и b
будучи наборами
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]
Добавление к этому, лучший подход кdo union
или даже intersection
может быть для преобразования списка списков в список наборов, используя map(set,list1)
, разворачивая наборы, а затем выполняя операции
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}