2011-10-19 50 views
0

我正在使用bisect_right()在txt文件中進行搜索。 文本文件中的每一行都包含以下字符串「word1 word2(tab)number」。也就是說,兩個單詞由一個空白(word1和word2),一個選項卡和一個數字分隔。 我用帶readlines()的列表讀取文件。 我正在使用帶有參數「word1 word2」(word1(空白)word2)的bisect_right來查找列表中找到(子)字符串「word1 word2」的索引。 bisect_right似乎找到了正確的位置,它返回(子)字符串所在的實際索引而不是右側的索引。 如果(子)字符串(word1(空白)word2)存在於列表中,不應該bisect_right向右返回索引嗎?搜索一個子字符串可能是一個問題嗎?python 2.6 bisect_right返回索引而不是右側的索引(索引+ 1)

+0

如果你真的只解析文本,使用'split()'和[相關字符串方法](http://docs.python.org/library/stdtypes.html#string-methods)可能是一個更強大的處理方法與事物 – brc

回答

1

使用bisect模塊的搜索返回「插入點」,而不是索引。插入點是位於之間的兩個值。它旨在像這樣使用s.insert(i, 'new value')

而不是插入點,您想要搜索序列中值的索引。在文檔中的例子來說明如何做到這一點:http://docs.python.org/library/bisect.html#searching-sorted-lists

當然,這一切只是作品,如果列表的串的二進制搜索之前進行排序,但你可能已經知道了:-)