Как вернуть самую большую координату x и самую большую координату y из списка сегментов? - PullRequest
0 голосов
/ 29 мая 2020

Итак, у меня есть набор сегментов в качестве входных данных, состоящих из координат x и y. Горизонтальные сегменты имеют левую и правую координаты x и уникальную координату y, а вертикальные сегменты имеют координаты y вверх и вниз и уникальную координату x. Я решил, что они будут выглядеть так:

Горизонтальный сегмент = ((2,8), 4)

Вертикальный сегмент = (3, (2,5))

Все сегменты = [((2,8), 1), (3, (2,5)), (5, (3,4)), (4, (6,7))]

Я хочу вернуть самую большую координату x и самую большую координату y. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вот как вы можете его решить:

data = [((2,8), 1), (3, (2,5)), (5, (3,4)), (4, (6,7))]
x = []
y = []
for elem in data:
    if type(elem[0])==tuple:
        x.append(max(elem[0]))
    else:
        x.append(elem[0])
    if type(elem[1])==tuple:
        y.append(max(elem[1]))
    else:
        y.append(elem[1])

print("Max(x) =",max(x))
print("Max(y) =",max(y))

Вывод:

Max(x) = 8
Max(y) = 7
0 голосов
/ 29 мая 2020

Если вы пытаетесь извлечь значения без кортежа в своем списке, вы можете попробовать что-то вроде этого:

d = [((2,8), 1), (3, (2,5)), (5, (3,4)), (4, (6,7))]
d_x = [x for x, y in d if not isinstance(x, tuple)]
d_y = [y for x, y in d if not isinstance(y, tuple)]

print ("Max X:", max(d_x))
print ("Max Y:", max(d_y))

Изменить:

Просто хотел посмотреть, насколько коротким это может быть быть написанным и придумать этот однострочный:

max_x, max_y = map(lambda l : max([max(i) if isinstance(i, tuple) else i for i in l]), zip(*input_list))
...