Вы пишете: «Однако невероятно неэффективно, когда количество значений увеличивается». Почему? Чем больше данных, тем больше времени требуется для их обработки. Я не думаю, что вложенные циклы являются «невероятной» проблемой для выполнения вашей функции. Производительность может быть увеличена путем использования наиболее подходящих структур данных и их алгоритмов обработки.
Что касается вашей функции, ее можно переписать в более читабельном виде:
def max_assignment_points(difficulties: list, points: list, students: list) -> int:
total_points = 0
for student in students:
for i in range(len(difficulties) - 1):
if difficulties[i] < student < difficulties[i + 1]:
total_points += points[i]
elif student == difficulties[i]:
total_points += points[i]
return total_points
PS
Во-первых, это плохая идея - использовать переменную global
внутри функции и изменять ее одновременно. Что мешает вам объявить локальную переменную?
Во-вторых, когда вы объявляли функцию, вы писали, что она возвращает значение int
, но на самом деле она возвращает str
.
В-третьих использование исключения для выхода из oop кажется очень странным.