代码之家  ›  专栏  ›  技术社区  ›  N08

在python的列表中应用if-else一行程序

  •  0
  • N08  · 技术社区  · 6 年前

    我有一个阵列 y 值为0或1。然后我有一个数组 yp 它的值介于0和1之间。这两个数组的长度相同。

    如果输入 是1,然后我要附加相应的 YP型 到列表,否则我要追加 1-yp 以下内容:

    y  = [1,1,1,0,0]
    yp = [0.1, 0.2, 0.3, 0.4, 0.5]
    
    x = []
    for idx, i in enumerate(y):
        if i:
            x.append(yp[idx])
        else:
            x.append(1-yp[idx])
    

    是否有一种更短的方法来用python编写它,也许没有for循环?

    4 回复  |  直到 6 年前
        1
  •  3
  •   bla    6 年前

    你可以用列表理解 zip

    >>> y  = [1,1,1,0,0]
    >>> yp = [0.1, 0.2, 0.3, 0.4, 0.5]
    >>> [b if a else 1 - b for a, b in zip(y, yp)]
    [0.1, 0.2, 0.3, 0.6, 0.5]
    
        2
  •  2
  •   Ankur Sinha    6 年前

    如果我正确理解你,也许你在找这样的东西?

    for idx, i in enumerate(y):
        x.append(yp[idx]) if i else x.append(1-yp[idx])
    

    参考文献: http://book.pythontips.com/en/latest/ternary_operators.html

        3
  •  2
  •   ldavid    6 年前

    y, yp = map(np.asarray, (y, yp)  # convert to an array
    x = y * yp + (1 - y) * (1 - yp)
    

    上述代码解释如下:

    • a = y * yp y yp 1 * yp y = 1 0 y = 0
    • b = (1 - y) * (1 - yp) 1-yp y=0 Y=1
    • a + b
        4
  •  1
  •   Dadep    6 年前

    y  = [1,1,1,0,0]
    yp = [0.1, 0.2, 0.3, 0.4, 0.5]
    l=[yp[i] if y[i]==1 else 1-yp[i] for i in range(len(y))]
    

    >>> l
    [0.1, 0.2, 0.3, 0.6, 0.5]