在给定输入单词列表的情况下,编写一个程序,该程序可以生成所有单词,这些单词可以使用每个输入单词中的字符子集来形成。
例如,如果输入单词列表是: cat mat
输出文件将如下所示:a c t at ta act cat
我是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()发布于 2019-09-30 19:08:59
只是计算所有“光合作用”排列的结果需要花费大量的时间。使用基于生成器的方法,如下所示。
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()发布于 2019-09-30 19:18:33
最有可能的情况是,您的内存不足。但在这种情况下,不需要这样做。你需要一个生成器,而不是一个列表理解。例如
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/
https://stackoverflow.com/questions/58166256
复制相似问题