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)]