OccamaRazor
@OccamaRazor

Функция перебора всех подмножеств любого множества?

Работает только до 4 верно, если убрать последний for цикл то до 3. Как верно считать при любом количестве множеств?
def subsets(K):
    print([])

    for i in K:
        print([i])
        
        for j in K:
            if j == K[-1] or j == i:
                break
            print([i,j])

            for k in K:
                if j == K[-1] or j == k:
                    break
                print([i,j,k])
    print(K)
    
K = [1,2,3,4]
subsets(K)


Вывод:
[]
[1]
[2]
[2, 1]
[3]
[3, 1]
[3, 2]
[3, 2, 1]
[4]
[4, 1]
[4, 2]
[4, 2, 1]
[4, 3]
[4, 3, 1]
[4, 3, 2]
  • Вопрос задан
  • 1271 просмотр
Решения вопроса 2
lxsmkv
@lxsmkv
Test automation engineer
Если считать в двоичном коде от нуля до n то все комбинации битов будут перебраны. Как вам такая мысль?
Ответ написан
@Alexander1705
Как-то так:
def subsets(seq):
    for k in range(len(seq) + 1):
        yield from subsets_k(seq, k)


def subsets_k(seq, k):
    if k == 0:
        yield []
    else:
        for i in range(len(seq) - k + 1):
            for subset in subsets_k(seq[i+1:], k-1):
                yield [seq[i]] + subset

print(list(subsets([1, 2, 3, 4, 5])))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
flygrounder
@flygrounder
Python/Django
Это искали?
itertools.permutations
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы