Friday, July 5, 2024
HomeLanguagesPythonPython | Average of each n-length consecutive segment in a list

Python | Average of each n-length consecutive segment in a list

Given a list, the task is to find the average of each n-length consecutive segment where each segment contains n elements. Example: 

Input : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
         12, 13, 14, 15, 16, 17, 18, 19, 20]

Output: [3, 4, 5, 6, 7, 8, 9, 10, 11, 
         12, 13, 14, 15, 16, 17, 18]

Explanation:
Segment 1 - [1, 2, 3, 4, 5] => 15/5 = 3
Segment 2 - [2, 3, 4, 5, 6] => 20/5 = 4
Segment 3 - [3, 4, 5, 6, 7] => 25/5 = 5
and so on..... 

  Method #1: Using list comprehension 

Python3




# Python code to find average of each consecutive segment
 
# List initialisation
Input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
         12, 13, 14, 15, 16, 17, 18, 19, 20]
 
# Defining Splits
splits = 5
 
# Finding average of each consecutive segment
Output = [sum(Input[i:i + splits])/splits
          for i in range(len(Input) - splits + 1)]
 
# printing output
print(Output)


Output:

[3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0]

Time Complexity: O(n), where n is the length of the list 
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the list 

  Method #2: Using mean function 

Python3




# Python code to find average of each consecutive segment
 
# Importing
from statistics import mean
from itertools import islice
 
# List initialisation
Input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
         12, 13, 14, 15, 16, 17, 18, 19, 20]
 
# Finding average of each consecutive segment
zip_list = zip(*(islice(Input, i, None) for i in range(5)))
Output = list(map(mean, zip_list))
 
# printing output
print(Output)


Output:

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

Method 3: using for loop

the for loop iterates over the range of len(Input) – splits + 1 to obtain each consecutive segment. It then calculates the average of the current segment and appends it to the Output list. Finally, it prints the Output list.

Step-by-step approach:

Initialize the Input list with the given values.
Set the splits variable to the desired length of each consecutive segment.
Create an empty list called Output.
Iterate over the range of len(Input) – splits + 1. This generates the starting indices of each consecutive segment in Input.
For each starting index i, obtain the corresponding segment of length splits from Input using slicing.
Calculate the average of the current segment using the sum() function and dividing by splits.
Append the current average to the Output list.
Once all segments have been processed, print the Output list.

Python3




# Python code to find average of each consecutive segment
 
# List initialization
Input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
         12, 13, 14, 15, 16, 17, 18, 19, 20]
 
# Defining Splits
splits = 5
 
# Finding average of each consecutive segment using for loop
Output = []
for i in range(len(Input) - splits + 1):
    segment = Input[i:i+splits]
    average = sum(segment) / splits
    Output.append(average)
 
# Printing output
print(Output)


Output

[3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0]

Time complexity: O(n) where n is the length of the input list Input, since we are iterating over each element of the list once. 
Auxiliary space: O(k), where k is the number of segments in the output. This is because we are storing the average of each segment in the Output list.

Shaida Kate Naidoo
am passionate about learning the latest technologies available to developers in either a Front End or Back End capacity. I enjoy creating applications that are well designed and responsive, in addition to being user friendly. I thrive in fast paced environments. With a diverse educational and work experience background, I excel at collaborating with teams both local and international. A versatile developer with interests in Software Development and Software Engineering. I consider myself to be adaptable and a self motivated learner. I am interested in new programming technologies, and continuous self improvement.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments