如何在python中生成迭代器的所有不同排列(重复排列)

时间:2019-03-21 14:31:54

标签: python permutation itertools

我需要生成一个数字的所有数字排列,希望使用itertools,因为它是一个15位数字(277,777,788,888,899),并且将有超过一百万个排列。

如果我使用itertools.permutations()进行尝试,我会得到1,307,674,368,000个数字,而不是我真正需要的数字,只有1,261,260个。

在不丢弃itertools中重复的内容的情况下,有没有一种有效的方法来使它们第一次获得?

当前结果:

>>> [''.join(i) for i in itertools.permutations('moon')]
['moon', 'mono', 'moon', 'mono', 'mnoo', 'mnoo', 'omon', 'omno', 'oomn', 'oonm', 'onmo', 'onom', 'omon', 'omno', 'oomn', 'oonm', 'onmo', 'onom', 'nmoo', 'nmoo', 'nomo', 'noom', 'nomo', 'noom']

预期结果:

>>> [''.join(i) for i in itertools.permutations('moon')]
['moon', 'mono', 'mnoo', 'omon', 'omno', 'oomn', 'oonm','onom', 'onmo', 'nmoo', 'nomo', 'noom']

1 个答案:

答案 0 :(得分:-1)

您可以使用 set 关键字避免重复,以防万一您不知道set是做什么的,它会从数组中删除重复项并返回仅计数一次的新元素数组,因此使用set可以产生:-

>>> import itertools
>>> list(set(''.join(p) for p in itertools.permutations('moon')))
['onmo', 'oonm', 'oomn', 'onom', 'nmoo', 'moon', 'mono', 'omon', 'mnoo', 'omno', 'noom', 'nomo']