| f | from itertools import cycle | f | from itertools import cycle | 
             |  |  |  | 
             | def speed(path, stops, times): |  | def speed(path, stops, times): | 
            | n |     distance_iter = iter(path) | n |     path_iter = iter(path) | 
             |     stop_sequence = cycle(stops) |  |     stops_iter = cycle(stops) | 
             |     time_iter = iter(times) |  |     times_iter = iter(times) | 
             |     while True: |  |     while True: | 
            | n |         report_stops = next(stop_sequence) | n |         stop_count = next(stops_iter) | 
             |         total_distance = 0 |  |         segment_distance = 0 | 
             |         segments_count = 0 |  |         distances_covered = 0 | 
             |         for _ in range(report_stops): |  |         for _ in range(stop_count): | 
             |             segment = next(distance_iter, None) |  |             distance = next(path_iter, None) | 
             |             if segment is None: |  |             if distance is None: | 
             |                 break |  |                 break | 
            | n |             total_distance += segment | n |             segment_distance += distance | 
             |             segments_count += 1 |  |             distances_covered += 1 | 
             |         if segments_count == 0: |  |         if distances_covered == 0: | 
             |             return |  |             return | 
            | n |         travel_time = next(time_iter, None) | n |         time = next(times_iter, None) | 
             |         if travel_time is None: |  |         if time is None: | 
             |             yield (total_distance / segments_count) |  |             yield (segment_distance / distances_covered) | 
             |             return |  |             return | 
            | t |         if travel_time > 0: | t |         if time > 0: | 
             |             yield (total_distance / travel_time) |  |             yield (segment_distance / time) |