首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成列表中每个单词的所有组合和排列

生成列表中每个单词的所有组合和排列
EN

Stack Overflow用户
提问于 2019-09-30 18:43:20
回答 2查看 408关注 0票数 4

在给定输入单词列表的情况下,编写一个程序,该程序可以生成所有单词,这些单词可以使用每个输入单词中的字符子集来形成。

例如,如果输入单词列表是: cat mat

输出文件将如下所示:a c t at ta act cat

我是pythonic代码的新手。我的代码已经在运行了,但是它不能处理像“光合作用”这样的很长的单词。我能错过什么呢?

代码语言:javascript
复制
from itertools import permutations
def x():
  y = ["cat", "mat"]
  for i in y:
    z = [perm for length in range(1, len(i) + 1) for perm in permutations(i, length)]
    for i in z:
      a = ''.join(i)
      print(a)
x()
EN

回答 2

Stack Overflow用户

发布于 2019-09-30 19:08:59

只是计算所有“光合作用”排列的结果需要花费大量的时间。使用基于生成器的方法,如下所示。

代码语言:javascript
复制
from itertools import permutations

def get_perms(value, length):
    for l in range(length):
        for perm in permutations(value, l):
            yield ''.join(perm)
    else:
        return []

def x():
  y = ["photosynthesis"]
  for i in y:
      perms = get_perms(i, len(i))
      for item in perms:
          print(item)

x()
票数 4
EN

Stack Overflow用户

发布于 2019-09-30 19:18:33

最有可能的情况是,您的内存不足。但在这种情况下,不需要这样做。你需要一个生成器,而不是一个列表理解。例如

代码语言:javascript
复制
from itertools import permutations

def x(y):
   for i in y:
       for length in range(1, len(i) + 1):
           for perm in permutations(i, length):
               yield ''.join(perm)


for p in x(["cat", "mat"]):
   print(p)

现在,您还可以将所有这些内容逐行写入文件,或者写入数据库,或者其他任何东西。

原因是,生成器不会将整个数据保存在内存中。它将其打印/写入文件,然后将其忘记。排列往往很快就会变得非常大。

(您也可以使用生成器理解)

https://code-maven.com/list-comprehension-vs-generator-expression https://www.geeksforgeeks.org/python-list-comprehensions-vs-generator-expressions/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58166256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档