为了账号安全,请及时绑定邮箱和手机立即绑定

python根据for循环(或其他合适的方法)更改列表的值

python根据for循环(或其他合适的方法)更改列表的值

ibeautiful 2022-07-26 11:02:49
如果输入低于 0,我需要将列表的值更改为 0,如果输入高于 255,则将其更改为 255。即如果列表为 [265,45,-23],我需要将其更改为 [255 ,45,0]。试图弄清楚几个小时,但放弃了一点(初始输入是一个元组)。到目前为止,这是我的代码,但我不知道应该使用哪种逻辑:   def rgb(r, g, b):    x = (r,g,b)    x = list(x)    for i in x:        if i<0:            x=0        if i>255:            x=255    print(x)
查看完整描述

5 回答

?
一只名叫tom的猫

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]


查看完整回答
反对 回复 2022-07-26
?
明月笑刀无情

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]


查看完整回答
反对 回复 2022-07-26
?
一只萌萌小番薯

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]


查看完整回答
反对 回复 2022-07-26
?
侃侃无极

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


查看完整回答
反对 回复 2022-07-26
?
HUWWW

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]


查看完整回答
反对 回复 2022-07-26
  • 5 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信