【发布时间】:2012-12-19 13:25:33
【问题描述】:
以下是我用 Python 编写的应用程序的基本步骤:
- 生成随机颜色列表
- 创建每种颜色的映射,以该颜色到 3D(r、g、b)空间中“源颜色”的距离为索引。 (例如,橙色 (255, 150, 0) 比深蓝色 (0, 0, 100) 更接近红色 (255, 0, 0)。到目前为止,我有一个格式为 (distance, color )。
- 根据我计算的距离(从最低到最高)对该元组列表进行排序。
- 检索已排序颜色的列表
这是我的函数,我收到以下错误:TypeError: 'int' object has no attribute '_getitem_' on line sorted_by_dist = sorted(colorMap, key=lambda tup: tup[0])
# Sorts a list of colors according to distance from the source color
def sort_colors(colors, source):
colorMap = ()
sortedColors = list()
for i in range(len(colors)):
dist = dist_3d(colors[i], source)
colorMap = colorMap + (dist, colors[i])
sorted_by_dist = sorted(colorMap, key=lambda tup: tup[0])
for (d, c) in sorted_by_dist:
sortedColors.append(c)
return sortedColors
假设我的 dist_3d() 函数是正确的并返回一个整数值(它是,并且确实),我做错了什么?我不明白。
【问题讨论】:
-
RGB 三元组之间的颜色距离根本上是错误的,与代码是否正确无关。
-
是的,我明白这一点。它也与整个应用程序无关......现在它只是一个占位符函数,而我的其他代码片段正在工作。它发生在我脑海中作为占位符的第一个“与颜色有关的事情”中。
-
@mmgp,你为什么这么说?实验室色彩空间可能会更好,但 RGB 并不算太破旧。
-
@MarkRansom 真的吗? RGB 的距离函数是多少?
-
@mmgp:
sqrt((r1-r2)**2+(g1-g2)**2+(b1-b2)**2)和sqrt是可选的。
标签: python list sorting tuples