在列表理解上增加值限制

时间:2013-05-13 23:32:24

标签: python colors rgb list-comprehension

我试图找到一种方法来获取两个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

这是我可以干净地使用列表推导的东西吗?还是有更好的方法?

2 个答案:

答案 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))