我之前已经找到了这个问题的一些答案,但它们对于当前的Python版本来说似乎已经过时了(或者至少它们对我不起作用)。
我想检查字符串列表中是否包含子字符串。我只需要布尔结果。
我找到了这个解决方案:
word_to_check = 'or'
wordlist = ['yellow','orange','red']
result = any(word_to_check in word for word in worldlist)
从这段代码中我希望得到一个True
价值。如果单词是“der”,那么输出应该是False
.
但是,结果是一个生成器函数,我找不到方法来获取True
value.
任何想法?
邮政编码
OP发布的代码使用any()是正确的并且应该有效。不过,“worldlist”的拼写需要修正。
str.join() 的替代方法
也就是说,通过对单个组合字符串使用子字符串搜索,可以得到一个简单而快速的解决方案:
>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)
>>> 'or' in combined
True
>>> 'der' in combined
False
对于短单词列表,这比使用的方法快几倍any.
如果combined字符串可以在搜索之前预先计算,运算符内搜索将始终击败any即使对于大型单词列表也可以采用这种方法。
集合的替代方法
如果提前预先计算子串集并且不介意使用更多内存,则 O(n) 搜索速度可以降低到 O(1)。
预计算步骤:
from itertools import combinations
def substrings(word):
for i, j in combinations(range(len(word) + 1), 2):
yield word[i : j]
wordlist = ['yellow','orange','red']
word_set = set().union(*map(substrings, wordlist))
快速 O(1) 搜索步骤:
>>> 'or' in word_set
True
>>> 'der' in word_set
False
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)