1

我试图找到一种干净的方法来获取两个 int 元组的值之间的差异。元组本身有限制,因为它们代表 RGB 颜色。这是我到目前为止所拥有的:

tupleone = (255, 0, 255)  # Magenta
tupletwo = (255, 0, 0)  # Red
tuple([tupleone[x] - tupletwo[x] for x in range(3)])  # makes Blue

我在这里遇到的问题是边界检查,因为每个颜色值必须是 0-255。我要做的是,如果从较小的数字中减去较大的数字,则为该给定索引返回 0。我一直在使用它来测试单个索引:

value = -10
max(0, min(color, 255))  # value = 0

这是我可以用列表理解干净地做的事情吗?还是有更好的方法?

4

2 回答 2

3

这是一种方法

tuple(sorted((0, 255, tupleone[x] - tupletwo[x]))[1] for x in range(3))

但也许你应该只使用一个函数

def clamp_0_255(x):
    return max(0, min(x, 255))

tuple(clamp_0_255(tupleone[x] - tupletwo[x]) for x in range(3))

旁白:您不需要使用列表推导。tuple()与生成器表达式一起工作正常

于 2013-05-13T23:35:15.420 回答
1

当然,只需结合你所拥有的:

tuple(max(0, min(tupleone[x] - tupletwo[x], 255)) for x in range(3))
于 2013-05-13T23:35:35.017 回答