防止列表理解被零除 [英] Preventing dividing by zero in list comprehensions

查看:72
本文介绍了防止列表理解被零除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)]

我的问题是sum(matrix[i])在某些情况下可能为0,从而导致ZeroDivisionError.但是因为在这种情况下matrix[i][i]也是0,所以我如下解决了这个问题:

My problem is that sum(matrix[i]) could be 0 in some cases, resulting in a ZeroDivisionError. But because matrix[i][i] is also 0 in that case, I solved this as follows:

scores = [divide(matrix[i][i], sum(matrix[i])) for (i, scores) in enumerate(matrix)]

如果y == 0,函数divide(x, y)返回1,如果y > 0,则返回(x / y).但是我想知道是否有更简单的方法.也许我可以使用一些三元运算符,但是Python中存在吗?

The function divide(x, y) returns 1 if y == 0 and (x / y) if y > 0. But I wonder if there is an easier way. Maybe I could use some ternary operator, but does that exist in Python?

推荐答案

是的,在Python中,它称为条件表达式:

Yes, in Python it's called the conditional expression:

[matrix[i][i] / sum(matrix[i]) if sum(matrix[i]) != 0 else 0 
 for (i, scores) in enumerate(matrix)]

这篇关于防止列表理解被零除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆