То, что вы делаете, это набор умножения . например, {A, B} * {1,2} -> {{A, 1}, {A, 2}, {B, 1}, {B, 2}). В Python вы делаете это с itertools.product
:
from itertools import product
allChoices = set(product(set('CW'), set('csv')))
allChoicesPretty = set(a+b for a, b in allChoices)
numberOfChoices = len(allChoices)
print(allChoices)
print(allChoicesPretty)
print(numberOfChoices)
Выход:
{('C', 'v'), ('W', 's'), ('W', 'c'), ('C', 'c'), ('C', 's'), ('W', 'v')}
{'Wv', 'Ws', 'Cs', 'Wc', 'Cc', 'Cv'}
6
На самом деле вам вообще не нужен sympy
, более того, cartes
на самом деле является псевдонимом iterable.product
[1]
Комментарии
В set
каждый элемент встречается только один раз, а в set
порядок отсутствует. Если вам нужен один из них или оба, замените set
на list
и {}
на []
. Это может иметь значение, например, для вероятности, когда вы берете предмет из сумки и кладете его обратно. Но операции на множествах быстрее. Один и тот же способ получить несколько раз «одно и то же событие» при использовании наборов - добавить тег, например число, например, A, A, A -> A1, A2, A3. Это очень практично, если думать так, потому что обычно проще думать о событиях (или вычислять вероятности) с помощью тегов, а затем удалять теги (эквивалентно тому, чтобы сказать «порядок не имеет значения»), когда мы делаем вероятности.
Это также связано с тем, что в математике мы можем выразить (интерпретировать, построить) все в теории множеств [2], которая на самом деле нуждается в нескольких дедуктивных элементах теории доказательств [4]; это способ построить основы математики (ZFC: = Выбор Цермело Френкеля). Все математическое доказательство происходит внутри ZFC, но оно почти никогда не упоминается в доказательстве.
Существуют и другие способы интерпретации всей математики, такие как теория категорий [3], которая тесно связана с вычислением языков. Третье возможное основание, которое я знаю, - это теория гомотопического типа [5,6], с помощью которой на сегодняшний день мы можем делать меньше вещей, потому что поле очень новое, но то, что мы можем сделать, не является естественным и невероятным интересно концептуально.
[1] https://github.com/sympy/sympy/blob/da9fdef5e00f40dfd500bfa356c61ce6bad1b559/sympy/utilities/iterables.py#L6
[2] https://en.wikipedia.org/wiki/Set_theory
[3] https://en.wikipedia.org/wiki/Category_theory
[4] https://en.wikipedia.org/wiki/Proof_theory
[5] https://en.wikipedia.org/wiki/Homotopy_type_theory
[6] https://homotopytypetheory.org/book/