Для приведенного ниже массива мне интересно отсортировать ось X по оси Y и записать наименьший кортеж с самым низким значением X.

Массив:

A = [(537, 14),
     (537, 12),
     (538, 13),
     (538, 14), # (538, 14) should be removed and (537, 14) should be kept
     (539, 12),
     (709, 9)]

Я хотел бы сделать это:

New_A = [(537, 14),
         (537, 12),
         (538, 13), 
         (539, 12),
         (709, 9)]

Что я мог попробовать здесь?

-1
Jeremy 2 Мар 2018 в 12:54

3 ответа

Лучший ответ

Данный:

a = [(537, 14),
     (537, 12),
     (538, 13),
     (538, 14),
     (539, 12),
     (709, 9)]

Ты можешь сделать:

from itertools import groupby
from operator import itemgetter

f = itemgetter(1)
new_a = [next(group) for _, group in groupby(sorted(a, key=f, reverse=True), key=f)]

Что дает:

[(537, 14), 
 (538, 13), # <- I am assuming you have a typo here OP
 (537, 12), 
 (709, 9)]
6
Ev. Kounis 2 Мар 2018 в 10:15

Чтобы отсортировать список, используйте

New_A = sorted(A, key=lambda x: x[0])

Распространенным шаблоном является сортировка сложных объектов с использованием некоторых индексов объекта в качестве ключа.

Вторая часть вашего вопроса.

Чтобы получить самое низкое значение согласно X, и самое низкое значение согласно y оба показаны ниже

lowest = New_A[0]
print(lowest)
(537, 14)

lowest = New_A[-1]
print(lowest)
(709, 9)
1
2 Мар 2018 в 10:07

Данный двумерный массив имеет вид:

A = [(537, 14),  (537, 12),  (538, 13),  (538, 14),  (539, 12), (709, 9)]

Предположим, A является отношением с (x,y) как упорядоченные пары. Поэтому объявите две переменные x и y и инициализируйте их первыми значениями, т.е.

x=537 and y=14

Следовательно

x=A[0][0]
y=A[0][1]

Также возьмите две фиктивные переменные i и j, чтобы перебрать двумерный массив: Следующий алгоритм выбирает самое низкое значение x. Если существует более 1 x значений, которые равны, то выберите (x,y) так, чтобы y было наименьшим.

# Here it starts :

j=0
for i in range(1,len(A)):
    for j in range(0,1) :
        if A[i][j]<x :
            x=A[i][0]
            y=A[i][1]
        elif x==A[i][0] and y>A[i][1] :
            y=A[i][1]
ans=(x,y)        

print(ans)

Упорядоченная пара (x, y) сохраняется в переменной ans и затем печатается. Пожалуйста, дайте мне знать, если есть изменения в логике алгоритма.

1
Vikranth Inti 2 Мар 2018 в 10:39