Python 在列表理解中防止被零除

Python 在列表理解中防止被零除,python,list-comprehension,divide-by-zero,Python,List Comprehension,Divide By Zero,我有以下代码: scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)] 我的问题是,在某些情况下,sum(矩阵[i])可能为0,从而导致zero-division错误。但是因为在这种情况下,矩阵[i][i]也是0,所以我解决了这个问题,如下所示: scores = [divide(matrix[i][i], sum(matrix[i])) for (i, scores) in enumerate

我有以下代码:

scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)]
我的问题是,在某些情况下,
sum(矩阵[i])
可能为0,从而导致
zero-division错误。但是因为在这种情况下,
矩阵[i][i]
也是0,所以我解决了这个问题,如下所示:

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

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

是的,在Python中称为:


三元条件确实存在:

'blah' if True else 'wee'

但这将使
sum
计算两次。@ovgolovin很遗憾是的,但这是一个解决方案:3是的,毫无疑问这是一个解决方案+1美元。我只是想知道是否有可能在列表理解中重用
sum
的结果。因此,建议的解决方案更快?@Lewistrick取决于您如何实现
divide
。如果它计算两次
sum
,则不会更快。
'blah' if True else 'wee'
[(lambda x, y: 0 if y == 0 else x/y)(row[i], sum(row))
 for i, row in enumerate(matrix)]