Encontre Powerset em Python

Hemank Mehtani 30 janeiro 2023
  1. Use a abordagem iterativa para obter um Powerset em Python
  2. Use a função itertools.combinations para encontrar um Powerset em Python
  3. Use o método de compreensão de lista para encontrar um Powerset em Python
  4. Use o método recursivo para encontrar um Powerset em Python
Encontre Powerset em Python

Em matemática, um conjunto de potência de qualquer conjunto é um conjunto que contém todos os subconjuntos possíveis de um determinado conjunto junto com um conjunto vazio. Em outras palavras, todos os subconjuntos de um conjunto também são conhecidos como conjunto de potência. Pode haver um conjunto poderoso de listas, conjuntos, strings, etc., em Python.

Neste tutorial, encontraremos o conjunto de potência de um determinado conjunto em Python.

Use a abordagem iterativa para obter um Powerset em Python

Embora possamos usar a abordagem recursiva e a abordagem iterativa para encontrar um conjunto de poderes, a abordagem iterativa é preferível à recursiva por ser um processo mais rápido.

Usamos um loop for aninhado para criar tal conjunto de poderes.

Por exemplo,

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))

Resultado:

[[], [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

Use a função itertools.combinations para encontrar um Powerset em Python

itertools é um módulo em Python usado para iterar sobre estruturas de dados. Essas estruturas de dados também são conhecidas como iteráveis. Eles podem ser ultrapassados ​​usando for-loop.

A função combinations deste módulo pode criar combinações de um conjunto para criar um conjunto de potência.

Veja o código abaixo.

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)

Resultado:

x
y
z
xy
xz
yz
xyz

Use o método de compreensão de lista para encontrar um Powerset em Python

De compreensão de lista é uma forma de criar novas listas com base na lista existente. Ele oferece uma sintaxe mais curta, sendo mais compacta e rápida do que as outras funções e loops usados ​​para criar uma lista.

Também usamos um loop for aninhado neste método.

Por exemplo,

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))

Resultado:

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

Use o método recursivo para encontrar um Powerset em Python

O método recursivo é um método onde uma função continua invocando a si mesma com diferentes argumentos. Podemos criar uma função recursiva para encontrar o conjunto de poderes de um conjunto.

Por exemplo,

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)

Resultado:

abc
ab
ac
a
bc
b
c

Artigo relacionado - Python Set