Searching#
Linear search is one line: x in xs or a generator
expression. Use a set or dict when membership tests will
repeat (O(1) average vs O(n)).
if target in xs: # O(n) for list, O(1) for set
...
first_match = next((x for x in xs if pred(x)), None)
Binary search via bisect for sorted sequences.
from bisect import bisect_left, bisect_right, insort
def index(xs, target):
"""Return index of `target` in sorted `xs`, or -1."""
i = bisect_left(xs, target)
if i < len(xs) and xs[i] == target:
return i
return -1
insort(xs, new_value) # maintains sorted order, O(n) insert
References#
Sorting for keeping the sequence sorted in the first place.