Найдите Powerset в Python

  1. Используйте итерационный подход, чтобы получить Powerset на Python
  2. Используйте функцию itertools.combinations, чтобы найти Powerset в Python
  3. Используйте метод понимания списка, чтобы найти Powerset в Python
  4. Используйте рекурсивный метод для поиска Powerset в Python

В математике набор мощности любого набора - это набор, который содержит все возможные подмножества данного набора вместе с пустым набором. Другими словами, все подмножества набора также известны как набор мощности. В Python может быть мощный набор списков, наборов, строк и т. Д.

В этом руководстве мы найдем набор мощности для данного набора в Python.

Используйте итерационный подход, чтобы получить Powerset на Python

Хотя мы можем использовать как рекурсивный подход, так и итерационный подход для поиска набора мощности, итерационный подход предпочтительнее рекурсивного, поскольку это более быстрый процесс.

Мы используем вложенный цикл for для создания такого набора мощности.

Например,

def powerset(fullset):
  listsub = list(fullset)
  subsets = []
  for i in range(2**len(listsub)):
    subset = []
    for k in range(len(listsub)):            
      if i & 1<<k:
        subset.append(listsub[k])
    subsets.append(subset)        
  return subsets
subsets = powerset(set([1,2,3,4]))
print(subsets)
print(len(subsets))

Выход:

[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3], [4], [1, 4], [2, 4], [1, 2, 4], [3, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]]
16

Используйте функцию itertools.combinations, чтобы найти Powerset в Python

itertools - это модуль в Python, используемый для перебора структур данных. Эти структуры данных также известны как итерируемые. Их можно перешагнуть с помощью цикла for.

Функция combinations из этого модуля может создавать комбинации набора для создания набора мощности.

См. Код ниже.

from itertools import combinations
def powerset(string):
    n = len(string)
    for i in range(0,n+1):
        for element in combinations(string,i):
            print(''.join(element))
string=['x','y','z']
powerset(string)

Выход:

x
y
z
xy
xz
yz
xyz

Используйте метод понимания списка, чтобы найти Powerset в Python

Понимание списков - это способ создания новых списков на основе существующего списка. Он предлагает более короткий синтаксис, более компактный и быстрый, чем другие функции и циклы, используемые для создания списка.

В этом методе также используется вложенный цикл for.

Например,

def get_subsets(fullset):
  listrep = list(fullset)
  n = len(listrep)
  return [[listrep[k] for k in range(n) if i&1<<k] for i in range(2**n)]
string=['x','y','z']
print(get_subsets(string))

Выход:

[[], ['x'], ['y'], ['x', 'y'], ['z'], ['x', 'z'], ['y', 'z'], ['x', 'y', 'z']]

Используйте рекурсивный метод для поиска Powerset в Python

Рекурсивный метод - это метод, при котором функция продолжает вызывать себя с разными аргументами. Мы можем создать рекурсивную функцию, чтобы найти набор мощности набора.

Например,

def powerSet(string , index , c):
    if index == len(string):
        print(c)
        return
    powerSet(string, index + 1,
             c + string[index])
    powerSet(string, index + 1, c)

s1 = ["a","b","c"]
index = 0
c = ""
powerSet(s1, index , c)

Выход:

abc
ab
ac
a
bc
b
c

Сопутствующая статья - Python Set

  • Как присоединиться к двум сетам в Python
  • Преобразовать список в набор в Python