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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP