问题
I have the following code:
scores = [matrix[i][i] / sum(matrix[i]) for (i, scores) in enumerate(matrix)]
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)]
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?
回答1:
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)]
回答2:
[(lambda x, y: 0 if y == 0 else x/y)(row[i], sum(row))
for i, row in enumerate(matrix)]
回答3:
Ternary conditionals do exist:
'blah' if True else 'wee'
来源:https://stackoverflow.com/questions/17235536/preventing-dividing-by-zero-in-list-comprehensions