快速查找单词列表是否包含至少一个以特定字母开头的单词(不是 "find ALL words"!)
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)
但它们 return list
或 iterator
找到的所有字符串。
我只需要查找集合中是否存在任何这样的字符串,而不是全部获取它们。
在性能方面,获取列表似乎有点愚蠢,然后获取它的 len
并查看它是否大于零然后删除该列表。
有更好/更快/更干净的方法吗?
你需要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懒洋洋的吐字。所以如果你调用它一次,它只会给出一个词。
您的伪代码非常接近真实代码!
if any(word.startswith(word_part) for word in word_set):
continue
else:
break
any
returns 一找到一个真元素,所以它是高效的。
我已经设置(不是列表)字符串(单词)。这是一个大的。 (它是用 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)
但它们 return list
或 iterator
找到的所有字符串。
我只需要查找集合中是否存在任何这样的字符串,而不是全部获取它们。
在性能方面,获取列表似乎有点愚蠢,然后获取它的 len
并查看它是否大于零然后删除该列表。
有更好/更快/更干净的方法吗?
你需要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懒洋洋的吐字。所以如果你调用它一次,它只会给出一个词。
您的伪代码非常接近真实代码!
if any(word.startswith(word_part) for word in word_set):
continue
else:
break
any
returns 一找到一个真元素,所以它是高效的。