0

I have a list:

my_list = [A,B,G,X,F,D]

Each letter on the list is some point in space (x,y).

I have a function to calculate distance between 2 points:

dist = distance(A,B)

I need to calculate list of distances between neighbouring points on the list:

list_of_distances = [distance(A,B), distance(B,G), distance(G,X), distance(X,F), distance(F,D)]

The question is: How to do it iteratively in most pythonic way?

  • 1
    Does this answer your question? [Rolling or sliding window iterator?](https://stackoverflow.com/questions/6822725/rolling-or-sliding-window-iterator). Using a standard sliding window, you can simply compute `[distance(a, b) for a,b in windows(my_list, 2)]` – Brian61354270 Mar 19 '20 at 18:02
  • 2
    `dist = [distance(my_list[i], mylist[i+1]) for i in range(len(my_list)-1)]` – Tom Karzes Mar 19 '20 at 18:04

2 Answers2

5

you could use zip built-in function:

dist = [distance(a, b) for a, b in zip(my_list, my_list[1:])]

or as suggested by @DaniMesejo:

 dist = list(map(distance, my_list, my_list[1:]))
kederrac
  • 16,819
  • 6
  • 32
  • 55
2

Just another way: [*map(distance, my_list, my_list[1:])]

Demo:

>>> my_list = [3, 1, 4, 1, 5, 9]
>>> def distance(a, b):
        return abs(a - b)

>>> [*map(distance, my_list, my_list[1:])]
[2, 3, 3, 4, 4]
Kelly Bundy
  • 23,480
  • 7
  • 29
  • 65