python изменить значения списка на основе для l oop (или другого подходящего метода) - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужно изменить значение списка на 0, если входное значение ниже 0, и изменить его на 255, если входное значение выше 255. Т.е., если список [265,45, -23], мне нужно изменить его до [255,45,0]. Пытался разобраться с этим часами, но немного сдался (начальный вход - кортеж). Вот мой код, но я не знаю, какие логины c я должен использовать:

   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)

Ответы [ 6 ]

2 голосов
/ 13 февраля 2020

Вы можете сделать это в одной строке, используя понимание списка:

def rgb(r,g,b): return [min(255,max(0,n)) for n in (r,g,b)]

Вывод:

rgb(265,45,-23) 

[255, 45, 0]
2 голосов
/ 13 февраля 2020

Вам не нужен кортеж. Попробуйте это:

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]
1 голос
/ 13 февраля 2020

Вы можете использовать списки со go по 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))
1 голос
/ 13 февраля 2020

Вы можете использовать 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]
1 голос
/ 13 февраля 2020

Когда вы присваиваете 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]
0 голосов
/ 13 февраля 2020

Раствор

def rgb(r, g, b):
    rgb_tuple = (r,g,b)
    rgb_list = list(rgb_tuple)
    new_list = []
    for color in rgb_list:
        if color<0:
            new_list.append(0)
        elif color>255:
            new_list.append(255)
        else:
            new_list.append(color)
    print(new_list)
    return new_list

rgb(266, 80, -9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...