Должен ли я использовать sympy.utilities.iterables.variations (), чтобы получить permutations_with_replacement? - PullRequest
0 голосов
/ 10 января 2019

Я экспериментирую с перестановками Симпи без замены

from sympy.functions.combinatorial.numbers import nP
from sympy.utilities.iterables import permutations

nP('abc', 2)
# >>> 6

list(permutations('abc', 2))
# >>> [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]

Далее я не буду пытаться перестановок с заменой . Похоже, что permuations_with_replacement() метод не похож на метод combinations_with_replacement(), но есть метод variations():

from sympy.utilities.iterables import variations

nP('abc', 2, replacement=True)
# >>> 9

list(variations('abc', 2, repetition=True))
# >>>
    [('a', 'a'),
     ('a', 'b'),
     ('a', 'c'),
     ('b', 'a'),
     ('b', 'b'),
     ('b', 'c'),
     ('c', 'a'),
     ('c', 'b'),
     ('c', 'c')]

Выполняет ли метод variations() ту же функцию, которую я ожидал от permutations_with_replacement()?


См. Также: sympy.utilities.iterables.combinsk () с заменой?

1 Ответ

0 голосов
/ 10 января 2019

Метод variations делает именно то, что вы думаете, а именно вычисляет декартово произведение, метко названное product, методом пакета.

Это означает, что list(sympy.utilities.iterables.product('abc', repeat=2) даст те же результаты. С repetition=False, variations равно permutations.

Это также видно из внутреннего кода variations:

if not repetition:
    seq = tuple(seq)
    if len(seq) < n:
        return
    for i in permutations(seq, n):
        yield i
else:
    if n == 0:
        yield ()
    else:
        for i in product(seq, repeat=n):
            yield i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...