[9, 8, 7, 8]
We’ve worked with lists of integers, list of strings, and lists of floats – but we can also have lists of lists:
for
loops with lists of listsIt returns a single list that flattens that list of lists into a single list that contains exactly the same values. Do not use any list methods besides .append()
.
It takes an argument, lists
, which is a 2D list of numbers (floats or integers) and calculates the average of each sublist, and returns the highest average.
Name file two_d_highest_average.py
and submit to gradescope.
An illustration:
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '24px', 'fontFamily': 'Inter'}}}%% flowchart LR A["[[ ], <br> [2, 3, 7], <br> [15, 21, 3, 24], <br> [6, 4] ]"] --> B("len([]) > 0 ?") A --> SS("len([2, 3, 7]) > 0 ?") --> id1[calculate mean: 4] --> E1[highest mean: 4] A --> SSS("len([15, 2, 3, 8]) > 0 ?") --> id2[calculate mean: 7] --> E2[highest mean: 7] A --> SSSS("len([6, 4]) > 0 ?") --> id3[calculate mean: 5]--> E3[highest mean: 7] style id1 fill:#ffd5f1,stroke:#333,stroke-width:2px style id2 fill:#ffd5f1,stroke:#333,stroke-width:2px style id3 fill:#ffd5f1,stroke:#333,stroke-width:2px style E1 fill:#feffad,stroke:#333,stroke-width:2px style E2 fill:#feffad,stroke:#333,stroke-width:2px style E3 fill:#feffad,stroke:#333,stroke-width:2px
def get_highest_average(numbers):
highest_mean = None
for i in range(len(numbers)):
if len(numbers[i]) > 0:
total = 0
for j in range(len(numbers[i])):
total += numbers[i][j]
mean = total/len(numbers[i])
if highest_mean == None or mean > highest_mean:
highest_mean = mean
return highest_mean
def main():
assert get_highest_average([[1, 1, 1], [2, 2]]) == 2
assert get_highest_average([[1, 1, 1], []]) == 1
assert get_highest_average([[], []]) == None
assert get_highest_average([]) == None
weeks = [ [100, 100, 105, 105, 102, 102, 100],
[70, 71, 75, 72, 81, 80, 74],
[78, 72, 74, 71, 70, 70, 70],
[30, 32, 40, 38, 31, 32, 30] ]
average = get_highest_average(weeks)
assert average == 102
main()
An illustration:
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '24px', 'fontFamily': 'Inter'}}}%% flowchart LR A["[[ ], <br> [2, 3, 7], <br> [15, 21, 3, 24], <br> [6, 4] ]"] --> B("len([]) > 0 ?") A --> SS("len([2, 3, 7]) > 0 ?") --> id1[calculate mean: 4] A --> SSS("len([15, 2, 3, 8]) > 0 ?") --> id2[calculate mean: 7] A --> SSSS("len([6, 4]) > 0 ?") --> id3[calculate mean: 5] id1 --> E["[4, 7, 5]"] id2 --> E id3 --> E E --> id4[highest mean: 7] style id1 fill:#ffd5f1,stroke:#333,stroke-width:2px style id2 fill:#ffd5f1,stroke:#333,stroke-width:2px style id3 fill:#ffd5f1,stroke:#333,stroke-width:2px style id4 fill:#feffad,stroke:#333,stroke-width:2px
def max_list(numbers):
max = None
for n in numbers:
if max == None or n > max:
max = n
return max
def get_highest_average(lists):
means = []
highest_mean = None
for i in range(len(lists)):
if len(lists[i]) > 0:
total = 0
for j in range(len(lists[i])):
total += lists[i][j]
mean = total/len(lists[i])
means.append(mean)
highest_mean = max_list(means)
return highest_mean
def main():
assert get_highest_average([[1, 1, 1], [2, 2]]) == 2
assert get_highest_average([[1, 1, 1], []]) == 1
assert get_highest_average([[], []]) == None
assert get_highest_average([]) == None
weeks = [ [100, 100, 105, 105, 102, 102, 100],
[70, 71, 75, 72, 81, 80, 74],
[78, 72, 74, 71, 70, 70, 70],
[30, 32, 40, 38, 31, 32, 30] ]
average = get_highest_average(weeks)
assert average == 102
main()