Подтвердить что ты не робот

Набор всех подмножеств

В Python2 я мог бы использовать

def subsets(mySet):
    return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])

чтобы найти все подмножества mySet. Python 3 удалил reduce.

Что было бы столь же кратким переписыванием этого для Python3?

4b9b3361

Ответ 1

Здесь список нескольких возможных реализаций алгоритма набора мощности (набора всех подмножеств) в Python. Некоторые из них являются рекурсивными, некоторые являются итеративными, некоторые из них не используют reduce. Множество вариантов на выбор!

Ответ 2

Функция reduce() всегда может быть заменена циклом for. Здесь реализация Python reduce():

def reduce(function, iterable, start=None):
    iterator = iter(iterable)
    if start is None:
        start = next(iterator)
    for x in iterator:
        start = function(start, x)
    return start

(В отличие от встроенной версии Python reduce(), эта версия не позволяет передать параметр None как start.)

Специальный код этого кода с параметрами, переданными в reduce(), дает

def subsets(my_set):
    result = [[]]
    for x in my_set:
        result = result + [y + [x] for y in result]
    return result