mirror of
https://github.com/Dvorinka/SpotifyRecAlg.git
synced 2026-06-04 04:23:02 +00:00
first commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
from typing import TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
def use_bisection(
|
||||
source: list[T], key: str, queries: list[str], limit: int = -1
|
||||
) -> list[T | None]:
|
||||
"""
|
||||
Uses bisection to find a list of items in another list.
|
||||
|
||||
Returns a list of found items with `None` items being not found items.
|
||||
"""
|
||||
|
||||
def find(query: str):
|
||||
left = 0
|
||||
right = len(source) - 1
|
||||
|
||||
while left <= right:
|
||||
mid = (left + right) // 2
|
||||
if source[mid].__getattribute__(key) == query:
|
||||
return source[mid]
|
||||
elif source[mid].__getattribute__(key) > query:
|
||||
right = mid - 1
|
||||
else:
|
||||
left = mid + 1
|
||||
|
||||
return None
|
||||
|
||||
if len(source) == 0:
|
||||
return []
|
||||
|
||||
results = []
|
||||
|
||||
for query in queries:
|
||||
res = find(query)
|
||||
|
||||
if res is None:
|
||||
continue
|
||||
|
||||
results.append(res)
|
||||
|
||||
if limit != -1 and len(results) >= limit:
|
||||
break
|
||||
|
||||
return results
|
||||
Reference in New Issue
Block a user