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

问题描述 投票:2回答:2

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

例如,如果输入单词的列表是:猫垫

输出文件如下所示:一种CŤ在TA法案猫

我是pythonic代码的新手。我有已经运行的代码,但不适用于“光合作用”等很长的单词。我可能会缺少什么?

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()
python combinations permutation itertools
2个回答
1
投票

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

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()

0
投票

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

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-expressionhttps://www.geeksforgeeks.org/python-list-comprehensions-vs-generator-expressions/

© www.soinside.com 2019 - 2024. All rights reserved.