| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import timeit
- def first(iterable, validation):
- l, r = 0, len(iterable) - 1
- if validation(iterable[l]):
- return iterable[l]
- # if not validation(iterable[r]):
- # return None
- while l < r:
- mid = (r + l) // 2
- if validation(iterable[mid]):
- r = mid
- else:
- l = mid + 1
- if not validation(iterable[l]):
- return None
- return iterable[r]
- def last(iterable, validation):
- l, r = 0, len(iterable) - 1
- if validation(iterable[r]):
- return iterable[r]
- # if not validation(iterable[l]):
- # return None
- while l < r:
- mid = (r + l) // 2
- if validation(iterable[mid]):
- l = mid + 1
- else:
- r = mid
- if not validation(iterable[r]):
- return None
- return iterable[r - 1]
- lst = [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
- def test(i):
- return i == 4
- print(first(lst, test))
|