给出输入单词列表,写一个该程序可以生成所有单词,这些单词可以使用每个输入单词的字符子集来形成。
例如,如果输入单词的列表是:猫垫
输出文件如下所示:一种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()
仅花费大量时间来计算“光合作用”的所有排列的结果。使用基于生成器的方法,如下所示。
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()
很可能您的内存不足。但是在这种情况下,不需要这样做。需要列表生成器,而不是列表理解器。例如
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/