Набор всех подмножеств
В Python2 я мог бы использовать
def subsets(mySet):
return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])
чтобы найти все подмножества mySet
. Python 3 удалил reduce
.
Что было бы столь же кратким переписыванием этого для Python3?
Ответы
Ответ 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