def binarySearch(alist, item):
'''
Function: binarySearch
Description: Binary search on list
Input: List
Output: Tuple of boolean, index
Usage: binarySearch(list, item)
Notes: Does not edit list in place, recursive
'''
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return (True, midpoint)
else:
if item<alist[midpoint]:
return binarySearch(alist[:midpoint],item)
else:
return binarySearch(alist[midpoint+1:],item)
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binarySearch(testlist, 3))
print(binarySearch(testlist, 13))
def binarySearch(alist, item):
'''
Function: binarySearch
Description: Binary search on list
Input: List
Output: Tuple of boolean, index
Usage: binarySearch(list, item)
Notes: Does not edit list in place, recursive
'''
first = 0
last = len(alist)-1
found = False
while first<=last and not found:
midpoint = (first + last)//2
if alist[midpoint] == item:
found = True
else:
if item < alist[midpoint]:
last = midpoint-1
else:
first = midpoint+1
return found
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
19 print(binarySearch(testlist, 3))
20 print(binarySearch(testlist, 13))
def sequentialSearch(alist, item):
'''
Function: sequentialSearch
Description: Sequential search on list
Input: List
Output: Tuple of boolean, index
Usage: SequentialSearch(list, item)
Notes: Does not edit list in place
'''
pos = 0
found = False
while pos < len(alist) and not found:
if alist[pos] == item:
found = True
else:
pos = pos+1
return (found, pos)
testlist = [1, 2, 32, 8, 17, 19, 42, 13, 0]
print(sequentialSearch(testlist, 3))
print(sequentialSearch(testlist, 13))
haystack=["Zig","Zag","Wally","Ronald","Bush","Krusty","Charlie","Bush","Bozo"]
b = [ "Zig", "Bush" ]
def find_index(lista, listb):
for needle in listb:
try:
print (lista.index(needle), needle)
except ValueError, value_error:
print (needle,"is not in haystack")
print (find_index(haystack, b))
haystack=["Zig","Zag","Wally","Ronald","Bush","Bush","Krusty","Charlie","Bush","Bozo"]
b = [ "Zig", "Bush" ]
def find_index(lista, listb):
dicta = dict()
for needle in listb:
try:
#print (lista.index(needle), needle)
if needle not in dicta:
dicta[needle] = []
dicta[needle].append(lista.index(needle))
else:
dicta[needle].append(lista.index(needle))
except ValueError:
print (needle,"is not in haystack")
return dicta
print (find_index(haystack, b))
Functions that search for a specific element in a list, and return its index.
1. binarySearch = Binary search on array (fastest)
2. SequentialSearch = Sequential search on array (slowest)
3. index_search = Sequential search, returns indices of match
4. dict_index_search = Sequential search, stores matches in dictionary