繁体   English   中英

快速查找单词列表是否包含至少一个以某些字母开头的单词(不是“查找所有单词”!)

[英]Fast way to find if list of words contains at least one word that starts with certain letters (not "find ALL words"!)

我已经设置(不是列表)字符串(单词)。 这是一个很大的。 (它是用openCVtesseract从图像中删除的,因此没有可靠的方法来预测其内容。)

在处理这个列表的某个时刻,我需要确定它是否包含至少一个以我当前正在处理的部分开头的单词。 所以它就像(不是一个实际的代码):

if exists(word.startswith(word_part) in word_set) then continue else break

关于如何在列表中查找以此处开头的所有字符串有一个很好的答案:

result = [s for s in string_list if s.startswith(lookup)]

或者

result = filter(lambda s: s.startswith(lookup), string_list)

但是它们返回找到的所有字符串的listiterator 我只需要查找集合中是否存在任何这样的字符串,而不是全部获取。 在性能方面,获取列表,然后获取其len并查看它是否大于零,然后删除该列表似乎有点愚蠢。

有更好/更快/更清洁的方法吗?

您的伪代码非常接近真实代码!

if any(word.startswith(word_part) for word in word_set):
    continue
else:
    break

any一找到一个真正的元素就会返回,所以它很有效。

你需要yield

def find_word(word_set, letter):
    for word in word_set:
        if word.startswith(letter):
            yield word
    yield None
if next(find_word(word_set, letter)): print('word exists')

Yield 懒洋洋地发声。 所以如果你调用它一次,它只会给出一个词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM