发布代码
OP 使用any()发布的代码是正确的并且应该可以工作。不过,“worldlist”的拼写需要修正。
str.join() 的替代方法
也就是说,通过对单个组合字符串使用子字符串搜索有一个简单而快速的解决方案:
>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)
>>> 'or' in combined
True
>>> 'der' in combined
False
对于简短的单词表,这比使用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