带条件和双for循环语法错误的Python列表理解
当所说的“实际”元素等于1(“真正数”)时,我试图计算列表中的元素“预测”等于列表中相应元素“实际”的次数 这是我的密码:带条件和双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
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)
作为快捷方式:-)