在python中用字母生成所有可能性,并在python3中利用结果



首先,我遇到了这个问题:5 个字母有多少个单词(计算所有单词,即使是那些没有意义的单词),这些单词至少有一个 I 和至少两个 T,但没有 K 或 Y?

首先,我定义了字母表,它有24个字母(k和y不计算在内)。之后,我制作了一个代码来生成所有可能性

alphabet = list(range(1, 24))
for L in range(0, len(alphabet)+1):
for subset in itertools.permutations(alphabet, L):

我不知道如何使用这些数据。

如果"蛮力"方法对您来说就足够了,这将起作用:

import string
import itertools
alphabet = string.ascii_uppercase.replace("K", "").replace("Y", "")
count = 0
for word in itertools.product(alphabet, repeat = 5):
if "I" in word and word.count("T") >= 2:
count += 1
print (count)

它将打印结果 15645。

请注意,您必须使用itertools.product(),因为itertools.permutations()不会包含重复出现,因此它永远不会包含两次"T"。

编辑:或者,您可以使用列表推导式或生成器表达式计算计数。它利用了布尔TrueFalse分别等效于整数值 1 和 0 的事实。

count = sum(
"I" in word and word.count("T") >= 2
for word in itertools.product(alphabet, repeat = 5)
)

注意:有趣的是,第一个解决方案(带有counter += 1的显式for循环)在我的计算机上的运行速度比第二个解决方案(带有sum()的生成器表达式)快约15%。两者都需要相同的内存量(这是预期的)。

相关内容

最新更新