Если вы действительно хотите скорость, используйте три / автомат. Однако, это будет быстрее, чем простое сканирование всего списка, учитывая, что список слов отсортирован:
from itertools import takewhile, islice
import bisect
def prefixes(words, pfx):
return list(
takewhile(lambda x: x.startswith(pfx),
islice(words,
bisect.bisect_right(words, pfx),
len(words)))
Обратите внимание, что автомат равен O (1) относительно размера вашего словаря, тогда как этот алгоритм равен O (log (m)), а затем O (n) относительно количества строк, которые фактически начинаются с префикс, в то время как полное сканирование - O (m), с n << m. </p>