# Является ли решение хорошим с точки зрения "антикостыльности"?

Stack Overflow на русском Asked on October 30, 2020

Столкнулся с задачей: есть список комплексных чисес vertexes = [v0, v1, ..., vn], необходимо получить список distances = [d0, d1, ..., ], причём distances[i] = abs(vertexes[i + 1] - vertexes[i])

Например, vertexes = [1 + 0j, 3 + 0j, 3 + 4j, 6 + 8j] => distances = [2, 4, 5]

Моё решение:

import functools

def calculate_distances(vertexes):
distances = []

functools.reduce(lambda a, b: distances.append(abs(b - a)) or b, vertexes)

return distances

vertexes = [1 + 0j, 3 + 0j, 3 + 4j, 6 + 8j]

distances = calculate_distances(vertexes)

print(distances)

# Out: [2.0, 4.0, 5.0]


Стоит ли писать такой код? Может есть решение изящнее или правильнее или (изящнее и правильнее)? После такого у меня остаётся ужасное послевкусие костыльности. Так ли это на самом деле?

Ну я бы вообще вот так написал:

distances = [abs(b - a) for b,a in zip(vertexes[1:],vertexes)]


Correct answer by CrazyElf on October 30, 2020

Я бы так делал:

import itertools

def pairwise(iterable):
a, b = itertools.tee(iterable)
next(b, None)
return zip(a, b)

def calculate_distances(vertexes):
return [abs(b - a) for a, b in pairwise(vertexes)]

vertexes = [1 + 0j, 3 + 0j, 3 + 4j, 6 + 8j]

distances = calculate_distances(vertexes)

print(distances)


Answered by dIm0n on October 30, 2020

## Related Questions

### Создание пользователя в postgres

1  Asked on January 5, 2021

### Создать список дат между списком интервалов

1  Asked on January 5, 2021 by collob

### Набор битов данных о цвете с экрана монитора в массив c#

0  Asked on January 5, 2021

### Как правильно сделать зависимые фильтры?

0  Asked on January 4, 2021

### Yii2 открывается только главная страница

1  Asked on January 4, 2021

### Почему при запуске ноутбука меня выкидывает в boot menu?

0  Asked on January 4, 2021 by zeni1agent

### Обновление списка через шаблон

1  Asked on January 4, 2021 by simonzen

### Баг при использовании in-app purchases

1  Asked on January 4, 2021

### HTML&CSS Управление с помощью чекбоксов

1  Asked on January 4, 2021 by ender-toy

### Как объединить 2 листа EXCEL в 1 по совпадающим значениям из первой колонки?

1  Asked on January 4, 2021 by homie

### Проверка внутри Expression на null

2  Asked on January 4, 2021 by iluxa1810

### Как узнать, какое изображение загружено?

1  Asked on January 4, 2021 by insanus

### Создать файл в папке %username%

1  Asked on January 4, 2021 by ejkn

### Как правильно обработать нажатие в ListView что бы открывалась активити не по position а по id

1  Asked on January 4, 2021 by blck4

### Как разобраться в примере MVC?

1  Asked on January 3, 2021

### Переполнение массива

1  Asked on January 3, 2021 by konstantin

### Изменить COLLATION таблиц планов SQL Server

1  Asked on January 3, 2021 by kunoichi

### Солирование паролей пользователей

1  Asked on January 3, 2021 by helen

### Как скачать (вырвать) шрифт с дизайна Figma?

0  Asked on January 3, 2021 by hazcker

### Как можно проще сделать сравнение, на месте * может быть любое число?operation_code типа string

0  Asked on January 3, 2021