【问题标题】:How to generate all different arrangements of an iterator (permutations with repetition) in python [duplicate]如何在python中生成迭代器的所有不同排列(重复排列)[重复]
【发布时间】:2019-03-21 22:59:40
【问题描述】:

我需要生成一个数字的所有数字排列,希望使用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']

【问题讨论】:

  • 您想要的是独特的排列。这里有一个问题:stackoverflow.com/questions/11425070/…一些答案有python解决方案。
  • 是的,完全是重复的,我十分钟的浏览还不够......
  • 刚写完我的答案,看到这被标记为重复。我已经在链接的问题中发布了我的答案,因为我认为我的答案更有效率。
  • 干得好!谢谢

标签: python permutation itertools


【解决方案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']

【讨论】:

  • 我的问题不是删除重复项,而是避免计算复杂性。我每秒可以计算大约 120 万个排列,但我需要 290 小时才能完成我需要计算的数万亿个排列
  • 哦,可能我理解错了。无论如何,我不知道如何让它更有效率,抱歉。
  • 别担心,谢谢
  • @Teivel 看看这是否有帮助 codereview.stackexchange.com/questions/132704/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多