[英]Fast way to find if list of words contains at least one word that starts with certain letters (not "find ALL words"!)
我已经设置(不是列表)字符串(单词)。 这是一个很大的。 (它是用openCV和tesseract从图像中删除的,因此没有可靠的方法来预测其内容。)
在处理这个列表的某个时刻,我需要确定它是否包含至少一个以我当前正在处理的部分开头的单词。 所以它就像(不是一个实际的代码):
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)
但是它们返回找到的所有字符串的list
或iterator
。 我只需要查找集合中是否存在任何这样的字符串,而不是全部获取。 在性能方面,获取列表,然后获取其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.