Рубрики
Без рубрики

[Python PowerSet] Как получить все подмножества набора?

Эта статья показывает вам простое одноищеное решение для получения PowerSet данного набора. Простые и без библиотек!

Автор оригинала: Chris.

Это простой алгоритм, чтобы найти все силы данного набора. Если вы чувствуете, что вам нужно обновить навыки Python Set, посмотрите на мой полное руководство по Python Sets (с примерами Harry Potter).

Что такое PowerSet Set S?

PowerSet – это набор всех подмножеств данного набора S. Подмножество – это набор, который включает в себя произвольное количество элементов исходного множества S. Он включает в себя как пустой SET {}, так и данный набор S. Посмотрите на следующие примеры:

Пример 1:

Данный набор: s = {1}

PowerSet: P = {{}, {1}}

Пример 2:

Данный набор: s = {1, 2}

PowerSet: P = {{}, {1}, {2}, {1,2}}

Пример 3:

Данный набор: s = {1, 2, 3}

PowerSet: P = {{}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}

Можете ли вы уже увидеть картину того, как построить PowerSet в итеративной манере? Чтобы рассчитать PowerSet P of Set S с N элементами, просто рассчитайте PowerSet P ‘из подмножества S с элементами (N-1) и добавить N-TH-элемент для каждого набора в PowerSet P’. Теперь объедините полученный набор наборов с предыдущим PowerSet P ‘, и вы получаете PowerSet P. Другими словами, начните с пустого набора {} и поместите его во временный набор наборов p ‘. Теперь пройдите все элементы х в с. Для каждого элемента X и каждого набора P в P ‘создайте новое подмножество, которое состоит из объединения X и п. Эта стратегия будет подробно объяснена в следующем.

Код

Мы рассмотрим следующую проблему: создать одноклассное решение, которое рассчитывает PowerSet данного набора S.

# Dependencies
from functools import reduce


# The Data
s = {1, 2, 3}


# The One-Liner
ps = lambda s: reduce(lambda P, x: P + [subset | {x} for subset in P], s, [set()])


# The Result
print(ps(s))

Листинг: одноклассное решение с использованием базового арифметика массива.

Угадай вывод этого кода-фрагмента!

Как это устроено

Однопрокат показывает элегантный способ решить проблему расчета PowerSet. Идея состоит в том, чтобы запустить PowerSet в качестве пустого набора и многократно добавляя подмножества к нему до тех пор, пока не найдено больше подмножеств. Изначально только пустой набор находится в PowerSet. Теперь, на каждом шагу мы возьмем один элемент X из набора данных и создаю кучу новых подмножеств, которые естественным образом появляются, добавив X ко всем подмножеству, которые уже в PowerSet. Следовательно, размер Powerset удваивается каждый раз, когда мы добавляем новый элемент X. Таким образом, мы можем вырастить PowerSet One Element A-Time.

One-Liner использует функцию уменьшения для достижения этой идеи. Он поддерживает текущий PowerSet в переменной P (который изначально содержит только пустой набор). Использование понимания списка он создает новые подмножества – один для каждого существующего подмножества – и добавляет их в PowerSet P. В частности, он добавляет значение x из набора данных в каждое подмножество и, таким образом, удваивает размер PowerSet (содержащий подмножества и без элемента набора данных x). Этим способом , Уменьшите функцию неоднократно «сливаются» два элемента: PowerSet P и элемент х из набора данных.

Следовательно, результат одноклассника является следующим:

# The Result
print(ps(s))
# [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

Куда пойти отсюда?

Чтобы процветать в Python, вам нужно понимать такие основы, как функции лямбда, понимание списка и заданные операции. Они Базовое здание Блоки вашего расширенного кода понимают и производительность кодирования.

Обучение на основе головоломки является одним из лучших способов, чтобы ваш глаз был тренировался как программист Python – чтобы вы могли быстро понять любой съемный фрагмент кода, который вы читаете. Это один из самых важных навыков кодирования!

Чтобы тренировать свои навыки забавного способа, подумайте о том, чтобы стать пожизненным членом Finxter Premium и достичь уровня фрилансера Python. Так что вы можете поддерживать себя и вашу семью, работая с комфорта вашего дома. Формула для вашего нового навыка высокого дохода проста:

Вы + ваш компьютер + ваш собственный босс

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники To help students reach higher levels of Python success, he founded the programming education website Finxter.com . He’s author of the popular programming book Python One-Liners (NoStarch 2020), coauthor of the Coffee Break Python series of self-published books, computer science enthusiast, freelancer

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.