我正在使用bisect_right()搜索txt文件。 文本文件中的每一行包含以下字符串“word1 word2(tab)number”。也就是说,两个单词由空格(word1和word2),制表符和数字分隔。 我将该文件作为带有readlines()的列表读取。 我使用带有参数“word1 word2”(word1(空白)word2)的bisect_right来查找列表中找到(子)字符串“word1 word2”的索引。 bisect_right似乎找到了正确的位置,它返回(子)字符串所在的实际索引,而不是右边的索引。 如果列表中存在(子)字符串(word1(空白)word2),bisect_right不应该将索引返回到右侧吗?在搜索子字符串时会出现问题吗?
答案 0 :(得分:1)
使用bisect模块进行搜索会返回"插入点"而不是索引。插入点是两个值之间的位置。它旨在像s.insert(i, 'new value')
一样使用。
您希望在序列中搜索值的索引,而不是插入点。文档中的示例说明了如何执行此操作:http://docs.python.org/library/bisect.html#searching-sorted-lists
当然,所有这些只有在二进制搜索之前对字符串列表进行排序时才有效,但您可能已经知道: - )