I have a text file with some content. I need to search this content frequently. I have the following two options, which one is the best (by means of faster execution) ?
METHOD 1:
def search_list(search_string):
if search_word in li:
print "found at line ",li.indexOf(search_word)+1
if __name__="__main__":
f=open("input.txt","r")
li=[]
for i in f.readlines():
li.append(i.rstrip("\n"))
search_list("appendix")
METHOD 2:
def search_dict(search_string):
if d.has_key(search_word):
print "found at line ",d[search_word]
if __name__="__main__":
f=open("input.txt","r")
d={}
for i,j in zip(range(1,len(f.readlines())),f.readlines()):
d[j.rstrip("\n")]=i
search_dict("appendix")
For frequent searching, a dictionary is definitely better (provided you have enough memory to store the line numbers also) since the keys are hashed and looked up in O(1) operations. However, your implementation won’t work. The first
f.readlines()will exhaust the file object and you won’t read anytihng with the secondf.readlines().What you’re looking for is
enumerate:It should also be pointed out that in both cases, the function which does the searching will be faster if you use
try/exceptprovided that the index you’re looking for is typically found. (In the first case, it might be faster anyway sinceinis an orderNoperation and so is.indexfor a list).e.g.:
or for the list: