[英]How to calculate permutations with repetitions in python
重复项目时如何查找排列数? 例如,对于字符串aab
我想要以下输出: aab
, aba
, baa
。
您可以使用标准库itertools模块:
from itertools import permutations
iterable = "aab"
print(set(permutations(iterable, len(iterable))))
通过执行该代码,我得到以下输出:
None@vacuum:~$ python3.6 ./test.py
{('b', 'a', 'a'), ('a', 'b', 'a'), ('a', 'a', 'b')}
以下应该工作:
import itertools
set(itertools.permutations('aab'))
permutations
将产生所有排列,但将重复其中的一些输出,因为它无法区分a1 a2 b
和a2 a1 b
。 这里a1
是第一次出现的a
,和a2
第二个。 因此,您只需要保留唯一的元素,并且set
是实现此目的的一种好方法,因为构造函数会将可迭代的输入转换为唯一的集合。
more-itertools.distinct_permutations(iterable)
产生迭代元素中连续的不同排列。
与
set(permutations(iterable))
等效,除了不会生成重复项并将其丢弃。 对于较大的输入序列, 这效率更高 。
from more_itertools import distinct_permutations
for p in distinct_permutations('aab'):
print(''.join(p))
# baa
# aba
# aab
安装:
pip install more-itertools
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.