python,字符串比较不起作用?

时间:2012-05-31 01:24:53

标签: python string python-3.x compare

我的任务是在单词列表上创建二进制搜索,我已经提出了2个实现(显然还没有找到这个单词尚未找到的情况,但这还不是问题)但是当列表缩小到我要查找的单词时,我的函数没有完成,而是一直运行直到超过最大递归深度。

我进行了印刷,它在dasList[mid]清楚地显示了这个词,并一遍又一遍地显示出来,直到它最终放弃。

def _bisect2(dasList, word):
    mid = int(len(dasList)/2)
    if word.lower() > dasList[mid].lower():
        return _bisect2(dasList[mid: len(dasList)], word)            
    if word.lower() < dasList[mid].lower():
        return _bisect2(dasList[0: mid], word)
    else:
        return mid

正在调用

print(_bisect2(fileList, input('Please type a word')))

我正在使用Python 3.0解释器。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您的实现(几乎)适用于我(并且不会显示您使用预先排序的输入描述的行为)。我假设你已经对输入文件进行了排序?稍微修改(工作)的示例发布在下面。

def _bisect2(dasList, word,lidx=0):
    mid = int(len(dasList)/2)
    if word.lower() > dasList[mid].lower():
        return _bisect2(dasList[mid:], word,lidx=lidx+mid)            
    elif word.lower() < dasList[mid].lower():
        return _bisect2(dasList[:mid], word,lidx=lidx)
    return lidx+mid

words=sorted(["one","two","three","four","five","twenty","foo"])
print (words)
print (_bisect2(words,'three'))

请注意,您在最后一个部分列表中返回索引(始终为0)...

答案 1 :(得分:1)

这对我来说很好。请注意,最后返回的索引将始终是最小列表中单词的索引,而不是原始列表的索引。

另请参阅> compare再次对列表执行len,它只是迭代到结尾。切片语法允许您在迭代结束时不使用最后一个数字。

words = "The quick brown fox jumped over the lazy dog".split()

def bisect(words, word):
    mid = int(len(words)/2)
    if word.lower() > words[mid].lower():
        return bisect(words[mid:], word)
    elif word.lower() < words[mid].lower():
        return bisect(words[0:mid], word)
    return mid

words = sorted(words)
print bisect(words, 'dog')

答案 2 :(得分:1)

为什么不使用Python的bisect模块?

来自文档的

Recipe

def index(a, x):
    'Locate the leftmost value exactly equal to x'
    i = bisect_left(a, x)
    if i != len(a) and a[i] == x:
        return i
    raise ValueError

示例:

>>> a = ['alfred','edward','mary','susan','thomas','wilma']
>>> index(a, 'mary')
2
>>> index(a, 'martha')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in index
ValueError