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

Python list comprehension with conditional and double for loop syntax error

我正在尝试计算列表 'predicted' 中的元素等于列表 'actual' 中相应元素的次数,当说 'actual' 元素等于 1( 'true positives').

这是我的代码:

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

感谢您的帮助。

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

if 放在列表理解的末尾

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

作为旁注,使用您的特定构造,您可以添加一个三元运算并在您的列表理解中包含一个 else

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

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