«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как разделить коллекцию на все возможные подмножества на Python?

Как разделить коллекцию на все возможные подмножества на Python?

Опубликовано в 2025-03-13
Просматривать:153

How Can You Partition a Set Into All Its Possible Subsets in Python?

разделение устанавливает в Python

] задача - разделение данного набора элементов на все возможные подмножества. Например, разделение комплекта [1, 2, 3] дает следующие подмножеств:

[[1], [2], [3]]
[[1,2], [3]]
[[1], [2,3]]
[[1,3], [2]]
[[1,2,3]]

рекурсивное решение

один подход к этой проблеме - рекурсия. Учитывая раздел элементов n-1, мы можем расширить его для создания разделения N-элементов, включив NTH-элемент в одном из существующих подмножества, либо создав новое подмножество Singleton, содержащее только NTH Element.

этот рекурсивный алгоритм эффективно разбивает входной набор во время избегания дубликатов и бездельных зависимости на внешнем зависимости на внешнем зависимости от внешнего. Библиотеки:

def partition(collection):
    if len(collection) == 1:
        yield [ collection ]
        return

    first = collection[0]
    for smaller in partition(collection[1:]):
        # insert `first` in each of the subpartition's subsets
        for n, subset in enumerate(smaller):
            yield smaller[:n]   [[ first ]   subset]    smaller[n 1:]
        # put `first` in its own subset 
        yield [ [ first ] ]   smaller

something = list(range(1,5))

for n, p in enumerate(partition(something), 1):
    print(n, sorted(p))
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3