import heapq
def k_smallest_numbers(lst, k):
if not isinstance(lst, list) or not all(isinstance(x, (int, float)) for x in lst):
raise ValueError("nums must be a list of numbers")
if not isinstance(k, int) or k < 0:
raise ValueError("k must be a non-negative integer")
if k == 0:
return []
return heapq.nsmallest(k, lst)
lst = [42, 29, 90, 21, 90, 88, 37, 45]
k = 3
print(k_smallest_numbers(lst, k))
"""
run:
[21, 29, 37]
"""