我在试验不需要替换的交变
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.combinations() with replacement?
发布于 2019-01-10 16:24:03
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 ihttps://stackoverflow.com/questions/54128621
复制相似问题