只需一行即可完成Python分配

时间:2018-12-01 04:59:19

标签: python list

我是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 :(得分:3)

您可以改用字典。

如果,您可以用更多详细信息来重组问题,那么我认为答案就更有意义了!

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

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

Dictionary类具有一个名为.get()的内置函数,该函数接受一个键和一个默认值(如果找不到该键)。 colors.get(v, 'green')转换为:在字典v中给我键colors的值,但是如果找不到,给我'green'

答案 1 :(得分:2)

可以,但是您必须稍微修改语法(并使用else代替elif):

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']

答案 2 :(得分:2)

由于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']

类似于字典方法,这种方法可以很容易地扩展到更长的项目列表,但是您不必创建单独的字典。

答案 3 :(得分:0)

您可以像这样使用字典:

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

color = [color_codes[v] for v in y]