具有条件和双循环语法错误的Python列表理解

时间:2016-02-17 20:14:30

标签: python syntax-error list-comprehension

我试图计算列表中'预测'中的元素与我的列表'实际'中的相应元素相等的次数,当所述'实际'元素等于1时('真阳性'的数量)。

这是我的代码:

def F_approx(predicted, actual):
   est_tp = np.sum([int(p == a) if a for p in predicted for a in actual])
   est_fn = np.sum([int(p !=a) if a for p in predicted for a in actual])
   est_recall = est_tp / (est_tp + est_fn)
   pr_pred_1 = np.sum([int(p == 1) for p in predicted]) / len(predicted)
   est_f = np.power(est_recall, 2) / pr_pred_1
   return(est_f)

对于我的眼睛看起来是正确的,但我收到错误:

    File "<ipython-input-17-3e11431566d6>", line 2
       est_tp = np.sum([int(p == a) if a for p in predicted for a in actual])
                                           ^ 
    SyntaxError: invalid syntax

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

循环表达式之后if进入

[int(p == a) for p in predicted for a in actual if a]

然而,看起来你真的想要zip这些:

[int(p == a) for p, a in zip(predicted, actual)]

答案 1 :(得分:1)

if放在列表理解的末尾

[int(p == a) for p in predicted for a in actual if a]

作为附注,使用您的特定构造,您可以添加三元操作并在列表中理解其他内容

[int(p == a) if a else '' for p in predicted for a in actual if a]

将else添加到列表的末尾,理解将抛出SyntaxError