我试图找到一种方法来获取两个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
这是我可以干净地使用列表推导的东西吗?还是有更好的方法?
答案 0 :(得分: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()
可以使用生成器表达式
答案 1 :(得分:1)
当然,只要把你所拥有的东西结合起来:
tuple(max(0, min(tupleone[x] - tupletwo[x], 255)) for x in range(3))