首页 > 解决方案 > 使用两个字母python进行线性搜索

问题描述

我有这个程序,它应该返回(使用线性搜索)“语料库”中紧跟“最后一个”(包括重复项)的“语料库”中单个字符的所有实例的列表。字符的顺序应与它们在语料库中出现的顺序相同

例子:

    filter_possible_chars('lazy languid line', 'la')
        ['z', 'n']
        filter_possible_chars('pitter patter batton', 'tt')
        ['e', 'e', 'o']
filter_possible_chars('pitter pattor batt', 'tt')
    ['e', 'o']

但是我的程序在第二个示例中遇到了问题,在单词 batt 中的第三个 tt 之后,它之后没有任何内容,因此它显然不应该在列表中添加任何其他内容,但是我的 IndexError 列表索引超出了范围?

这是功能:

def filter_possible_chars(corpus, last):

listo = []
last_list = []
final = []

for thing in corpus:
    listo.append(thing)
for last_word in last:
    last_list.append(last_word)
    
    
for index, letter in enumerate(listo):
    
    if letter == last_list[0]:
        if listo[index+1] == last_list[1]:
            final.append(listo[index+2])  
print(final)

标签: pythonlinear-search

解决方案


后面什么都没有,所以它显然不应该在列表中添加任何其他内容

当代码到达倒数第二个t时,如果条件为 True 并且它试图获取listo[index+2]什么都不是,所以它会引发 IndexError 告诉你我不知道你想让我得到什么。当涉及到最后一个t时,它再次发生,试图得到listo[index+1]

您可以在倒数第三个字符处停止搜索:

def filter_possible_chars(corpus, last):
    result = []
    for i in range(len(corpus)-2):
        if corpus[i:i+2] == last:
            result.append(corpus[i+2])
    print(result)

推荐阅读