繁体   English   中英

如何在python中使用重复计算置换

[英]How to calculate permutations with repetitions in python

重复项目时如何查找排列数? 例如,对于字符串aab我想要以下输出: aabababaa

您可以使用标准库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 ba2 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM