5 回答
TA贡献1906条经验 获得超3个赞
您可以使用列表推导在一行中执行此操作:
def rgb(r,g,b): return [min(255,max(0,n)) for n in (r,g,b)]
输出:
rgb(265,45,-23)
[255, 45, 0]
TA贡献1828条经验 获得超4个赞
你不需要元组。尝试这个:
def rgb(r, g, b):
x = [r,g,b]
for i in range(len(x)):
if x[i] < 0:
x[i] = 0
if x[i] > 255:
x[i] = 255
return x
# Output: [255, 45, 0]
TA贡献1795条经验 获得超7个赞
当您分配给x您时,您将用新值替换整个变量,而不仅仅是迭代的当前元素。
您可以使用enumerate()一起获取列表索引和值,并在赋值中使用索引。
for i, val in enumerate(x):
if val < 0:
x[i] = 0
elif val > 255:
x[i] = 255
您还可以使用列表推导:
x = [min(255, max(0, val)) for val in x]
TA贡献2051条经验 获得超10个赞
您可以使用列表推导来遍历r,g和b. 同时创建一个测试条件的新列表。
def rgb(r, g, b):
return [0 if x < 0 else 255 if x > 255 else x for x in (r,g,b)]
你可以这样称呼它:
print(rgb(265,45,-23))
或喜欢:
x = [265,45,-23]
print(rgb(*x))
TA贡献1874条经验 获得超12个赞
您可以max(0, min(255, x))
用于列表元素x
。然后对于整个列表,您可以使用列表推导:
x = [max(0, min(255, y)) for y in x]
或者,您可以使用三元运算符:
x = [255 if y > 255 else (0 if y < 0 else y) for y in x]
添加回答
举报