如何在重复项目时查找排列数量?
例如,对于字符串aab
,我想要以下输出:aab
,aba
,baa
。
答案 0 :(得分:2)
您可以使用标准库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')}
答案 1 :(得分:0)
以下内容应该有效:
import itertools
set(itertools.permutations('aab'))
permutations
会产生所有排列,但它会重复输出一些输出,因为它无法区分a1 a2 b
和a2 a1 b
。此处a1
是a
的第一次出现,第二次出现a2
。因此,您需要保留唯一元素,set
是一种很好的方法,因为构造函数将输入迭代变换为唯一集合。
答案 2 :(得分:0)
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