Сортировать список кортежей по настраиваемому компаратору в python - PullRequest
3 голосов
/ 20 июня 2020

У меня есть список кортежей, который выглядит следующим образом: [(image, rgb tuple, float), (image, rgb tuple, float) ...]

Я хочу отсортировать этот список по значению rgb. Мне дан «целевой» цвет, и мне нужно отсортировать список по тому, насколько близок каждый кортеж rgb к целевому цвету. У меня есть функция под названием color_distance(c1, c2), которая принимает два цвета и возвращает расстояние между ними. Я хочу использовать эту функцию цветового расстояния в качестве функции компаратора для сортировки моего списка кортежей по расстоянию между значениями rgb каждого кортежа до целевого цвета.

Я мог бы отсортировать список по сортировке выбора и использовать свою функцию color_distance для сравнения, но я хочу, чтобы он сортировался быстрее / с помощью библиотечной функции.

Я пытаюсь использовать функцию sorted() в python но не знаю как.

1 Ответ

6 голосов
/ 20 июня 2020
import math
#Euclidean distance
def color_distance(color, target):
    return math.sqrt((color[0] - target[0])**2 + (color[1] - target[1])**2 + (color[2] - target[2])**2)

blueish = (93, 142, 170)
colors = [('Magenta',(216, 22, 266), 0.5), ('Yellow', (226, 226, 22), 0.95), ('Pink', (249, 159, 159), 0.75)]
sorted(colors, key=lambda c: color_distance(c[1], blueish))

Вывод:

[('Pink', (249, 159, 159), 0.75),
 ('Magenta', (216, 22, 266), 0.5),
 ('Yellow', (226, 226, 22), 0.95)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...