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

带条件和双for循环语法错误的Python列表理解,python,syntax-error,list-comprehension,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_r

当所说的“实际”元素等于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行
est_tp=np.sum([int(p==a),如果a对p的预测是对a的实际值])
^ 
SyntaxError:无效语法
感谢您的帮助。

如果在循环表达式之后,则
会:

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

但是,看起来您确实希望将这些内容压缩在一起:

[int(p == a) for p, a in zip(predicted, actual)]
如果
在循环表达式之后:

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

但是,看起来您确实希望将这些内容压缩在一起:

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

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

[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

,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

[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将抛出一个
语法错误

,非常有趣,谢谢。我刚刚读到的一个答案似乎与此相反(至少对于if-else案例)。为什么它在那里工作而不是在这里?没关系,我可以回答我自己的问题。此示例是一个筛选器,另一个不是。列表理解具有以下语法(大约):
[循环中变量的表达式\u表达式if filter\u表达式]
。这些表达式可以是任何形式——包括“条件表达式”,其形式为:
expression if conditional else conditional
。请注意,
else
是生成条件表达式所必需的。@HudsonCooper——还请注意,如果
predicted
actual
np.ndarray
,您可能可以这样做:
np.sum(predicted==array)
作为快捷方式:-)有趣,谢谢。我刚刚读到的一个答案似乎与此相反(至少对于if-else案例)。为什么它在那里工作而不是在这里?没关系,我可以回答我自己的问题。此示例是一个筛选器,另一个不是。列表理解具有以下语法(大约):
[循环中变量的表达式\u表达式if filter\u表达式]
。这些表达式可以是任何形式——包括“条件表达式”,其形式为:
expression if conditional else conditional
。请注意,创建条件表达式需要使用
else
。@HudsonCooper——还要注意,如果
预测的
实际的
np.ndarray
,您可能可以这样做:
np.sum(predicted==array)
作为快捷方式:-)