Есть ли способ вычислить все законные разделы набора с помощью Python?

Wiki дает это определение раздела набора

В математике разбиение множества — это группировка элементов множества в непустые подмножества таким образом, что каждый элемент входит ровно в одно подмножество.

И этот пример

Набор {1, 2, 3} имеет эти пять разделов

{ {1}, {2}, {3} }, sometimes written 1|2|3.
{ {1, 2}, {3} }, or 12|3.
{ {1, 3}, {2} }, or 13|2.
{ {1}, {2, 3} }, or 1|23.
{ {1, 2, 3} }, or 123

Есть ли способ вычислить все законные разделы набора с помощью Python?

Я пробовал разделы в sympy

from sympy.combinatorics.partitions import Partition
a = Partition([1, 2, 3])
a.members

и я получил

(1, 2, 3)

что, по-видимому, неверно.


person Community    schedule 08.08.2019    source источник


Ответы (1)


Если вы используете Sympy, вам нужно sympy.utilities.iterables.multiset_partitions:

>>> from sympy.utilities.iterables import multiset_partitions
>>> for p in multiset_partitions([1, 2, 3]):
...     print(p)
...
[[1, 2, 3]]
[[1, 2], [3]]
[[1, 3], [2]]
[[1], [2, 3]]
[[1], [2], [3]]
person alkasm    schedule 08.08.2019