python-3.xlistgeometry

sum each value in a list to all previous values including extra value between them


im trying to add the value of each element in a list to all previous values without using numpy of any other library. the list (dis) represent the length of elements which i need to calculate their positions if i want to place them and have 100 mm distance between each of them.

the first element i want it to be placed at 0 i have tried the following:

dis = [40,400,20,100,400]
betweenDistance = 100
_dis = []

total = 0

for e,x in enumerate(dis):
    if e == 0:
        _dis.append(0)
    elif e < (len(dis)-1):
        _dis.append( total + ((dis[e-1])/2) + betweenDistance + (x/2) )
        total+=(sum(_dis[0:e]))
    else:
        _dis.append((x/2)+betweenDistance+total)
        

OUT = _dis

what i need to have in the end is the following: 0, 320, 630, 790, 1140


Solution

  • Try defining a helper function with a for loop:

    def calculate_positions(elements: list[int], gap_distance: int) -> list[int]:
      """Calculate element positions based on their lengths and a set gap distance."""
      positions = [0]
      for i in range(1, len(elements)):
        prev_position = positions[-1]
        prev_element_length = elements[i - 1]
        current_element_length = elements[i]
        new_position = int(prev_position + (prev_element_length / 2) +
                           gap_distance + (current_element_length / 2))
        positions.append(new_position)
      return positions
    
    print(f'{calculate_positions(elements=[40, 400, 20, 100, 400], gap_distance=100) = }')
    

    Output:

    calculate_positions(elements=[40, 400, 20, 100, 400], gap_distance=100) = [0, 320, 630, 790, 1140]