Назначение Python в одну строку - PullRequest
0 голосов
/ 01 декабря 2018

Я новичок в Python, и я увидел эту форму, чтобы дать значения в список

color= ['red' if v == 0 else 'green' for v in y]

Но если я попытаюсь сделать это с 3 числами, например

color= ['red' if v == 0 elif v == 1 'blue' else 'green' for v in y]

это возможно, или я должен сделать это так:

color = ['none']*len(y)
for i in range(0,len(color)):
    if y[i] == 0:
        color[i] = 'red'
    elif y[i] == 1:
        color[i] = 'blue'
    else:
        color[i] = 'green'

, потому что эту форму не так легко написать, как другую.Спасибо.

Ответы [ 4 ]

0 голосов
/ 01 декабря 2018

Поскольку v имеет целочисленные значения, вы можете использовать значения для индексации в списке или кортеже имен цветов следующим образом:

>>> y = [0,1,2,1,1,0,2,2]
>>> [ ('red', 'blue')[i] if i in (0,1) else 'green' for i in y]
['red', 'blue', 'green', 'blue', 'blue', 'red', 'green', 'green']

Подобно словарным подходам, этот подход может быть расширен додовольно длинный список элементов, но вам не нужно создавать отдельный словарь.

0 голосов
/ 01 декабря 2018

Вместо этого вы можете использовать словарь.

Если бы вы могли бы реструктурировать свои вопросы с более подробной информацией, я думаю, что ответ будет более логичным!

colors = {
    0: 'red',
    1: 'blue'
}

color = [colors.get(v, 'green') for v in y]

В классе словаря есть встроенная функция .get (), которая принимает ключ и значение по умолчанию, если ключ не найден.colors.get(v, 'green') переводится в: дайте мне значение ключа v в словаре colors, но если не найдено, дайте мне 'green'.

0 голосов
/ 01 декабря 2018

Вы можете использовать словарь так:

color_codes = { 0: 'red',
1: 'blue',
2: 'green'
}

color = [color_codes[v] for v in y]
0 голосов
/ 01 декабря 2018

Вы можете, но вы должны немного изменить свой синтаксис (и использовать else вместо elif s):

color= ['red' if v == 0 else 'blue' if v == 1  else 'green' for v in y]

Пример :

y = [1,0,2,3,0,1]    
color= ['red' if v == 0 else 'blue' if v == 1  else 'green' for v in y]

>>> color
['blue', 'red', 'green', 'green', 'red', 'blue']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...