The easiest way is to remove zeros, sort, and then add zeros back diagonally:
>>> a = [[0,1,2],[3,0,0],[5,6,0]] >>> no_zeroes = [r[:i] + r[i+1:] for i, r in enumerate(a)] >>> no_zeroes [[1, 2], [3, 0], [5, 6]] >>> sorted_no_zeroes = [sorted(r, reverse=True) for r in no_zeroes] >>> sorted_no_zeroes [[2, 1], [3, 0], [6, 5]] >>> sorted_with_zeroes = [r[:i] + [0] + r[i:] for i, r in enumerate(sorted_no_zeroes)] >>> sorted_with_zeroes [[0, 2, 1], [3, 0, 0], [6, 5, 0]]
Completed into function:
>>> def sort_ignoring_zeroes(a): ... s = [sorted(r[:i] + r[i+1:], reverse=True) for i, r in enumerate(a)] ... return [r[:i] + [0] + r[i:] for i, r in enumerate(s)] ... >>> sort_ignoring_zeroes( [[ 0. , 1.3 , 0.56 , -0.65], ... [ 43 , 0. , 0.54 , 0.45], ... [ 7 , 0.5 , 0. , 0.12]]) [[0, 1.3, 0.56, -0.65], [43, 0, 0.54, 0.45], [7, 0.5, 0, 0.12]] >>>