gpt4 book ai didi

python - 生成始终包含特定字母python的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:36 24 4
gpt4 key购买 nike

我想生成单词加一个字母。但是所有生成的单词都必须包含该字母。我正在生成大量的单词。所以这样说是非常低效的:

(word for word in self.getWords(letters, 8) if letter in word)

或类似的东西。

getWords代码:

def getWords(self, iterable, maxDepth):
allWords = []
for depth in range(3, maxDepth + 1):
for word in itertools.permutations(iterable, depth):
allWords.append("".join(word))

我想让 getWords 只考虑其中包含 letter 的单词。有没有办法使用 itertools 来实现这个结果?

最佳答案

首先,生成包含所需字母的单词子集:

def subset(char, words):
return set([word for word in words if char in word.lower()])

bsub = subset("b", words)

然后你可以对这些词进行随机抽样:

# Take 100 random words which contain the letter b.
result = random.sample(bsub, 100)

或者,通过修改 getWords 我们可以过滤掉不包含所需字母的单词:

def getWords(self, iterable, requiredLetter, maxDepth):
allWords = set()
for depth in range(3, maxDepth + 1):
for word in itertools.permutations(iterable, requiredLetter, depth):
if requiredLetter in word:
allWords.add(word) # or maybe word.lower() if it's case insensitive

还值得一提的是:如果allWords 中的每个单词都是唯一的,则将其转换为set()。会将成员资格测试从 O(n) 减少到 O(1)

集合速度更快,因为它不必遍历整个列表来测试成员资格。字符串是不可变的,因此它们被散列,这使得成员资格测试需要常数时间。

在您的情况下,您没有做成员资格,因此转换为集合不会显着提高速度,但制作一个子集可供选择会加快速度,因为每一代都不需要测试有效性。

关于python - 生成始终包含特定字母python的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40773360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com