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

问题描述 投票:0回答:1

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

如果我用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']
python permutation itertools
1个回答
-1
投票

您可以使用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']
© www.soinside.com 2019 - 2024. All rights reserved.