5

我有以下代码:

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)返回 1 ify == 0(x / y)if y > 0。但我想知道是否有更简单的方法。也许我可以使用一些三元运算符,但这在 Python 中存在吗?

4

3 回答 3

6

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

[matrix[i][i] / sum(matrix[i]) if sum(matrix[i]) != 0 else 0 
 for (i, scores) in enumerate(matrix)]
于 2013-06-21T12:44:43.807 回答
2
[(lambda x, y: 0 if y == 0 else x/y)(row[i], sum(row))
 for i, row in enumerate(matrix)]
于 2013-06-21T12:57:29.383 回答
1

三元条件确实存在:

'blah' if True else 'wee'
于 2013-06-21T12:45:44.253 回答