I am looking for a more efficient way than brute-forcing my way through in the following problem in python 3.
Problem statement:
Input:
- 
An array of n integers, scores, where each score is denoted by scores_j
 
- 
An array of q integers, lowerLimits, where each lowerLimits_i denotes the lower limit for score range i.
 
- 
An array of q integers, upper limits, where each upperLimits_i denotes the upper limit for score range i.
 
Output: A function that returns an array of Q integers where the value at each index I denotes the number of integers that are in the inclusive range [lowerLimits_i, upperLimits_i].
Constraints:
- 1 ≤ n ≤ 1e5
 
- 1 ≤ scores_j ≤ 1e9
 
- 1 ≤ q ≤ 1e5
 
- 1 ≤ lowerLimits_i ≤ upperLimits_i ≤ 1e9
 
Example: Given scores= [5, 8, 7], lowerLimits = [3, 7], and upperLimits = [9, 7] I want to check how many of the integers are contained in each interval (inclusive). In this examples: intervals are [3,9] and [7,7], and the result would be [3, 1].
My code looks like this:
def check(scores, lowerLimits, upperLimits):
   res = []
   for l, u in zip(lowerLimits, upperLimits):
       res.append(sum([l <= y <= u for y in scores]))
   return res
if __name__ == "__main__":
   scores= [5, 8, 7]
   lowerLimits = [3, 7]
   upperLimits = [9, 7]
   print(check(scores, lowerLimits, upperLimits))