防止列表理解被零除
问题内容:
我有以下代码:
scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)]
我的问题是sum(matrix[i])
在某些情况下可能为0,从而导致ZeroDivisionError
。但是因为matrix[i][i]
在这种情况下也是0,所以我如下解决了这个问题:
scores = [divide(matrix[i][i], sum(matrix[i])) for (i, scores) in enumerate(matrix)]
该函数divide(x, y)
返回1y == 0
和(x / y)
如果y > 0
。但我想知道是否有更简单的方法。也许我可以使用一些三元运算符,但这在Python中存在吗?
问题答案:
是的,在Python中称为条件表达式:
[matrix[i][i] / sum(matrix[i]) if sum(matrix[i]) != 0 else 0
for (i, scores) in enumerate(matrix)]