Забудьте zip и создайте собственное решение:
list1 = ['course1', 'course2', 'course3', 'course4', 'course5']
list2 = [12, 3, 3, 4, 5]
def zip_condition(list_a, list_b, func):
iter_a = iter(list_a)
iter_b = iter(list_b)
while 1:
try:
a, b = next(iter_a), next(iter_b)
except StopIteration:
return
if func((a, b)):
yield (a, b)
result = list(zip_condition(list1, list2, lambda x: x[1] >= 5.5))
print(result)