Python 安定ソート atcoder ABC323 B - Round-Robin Tournament

・参考
docs.python.org

・説明
 2次元のリストにおいて、普通のソートと安定ソートを使った場合で比べる。降順のときは変わらないが昇順のときは2列目の値が小さいのから先に並び替える。

・例

ans=[[3, 0], [1, 1], [4, 2], [5, 3], [3, 4], [0, 5], [5, 6]]

#普通のソート。
ans.sort()  #[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]]
ans.sort(reverse=True)   #[[5, 6], [5, 3], [4, 2], [3, 4], [3, 0], [1, 1], [0, 5]]


#安定ソート。
from operator import itemgetter
ans=sorted(ans, key=itemgetter(0), reverse=True)  #ansの0列に対して大きい順に並べて、同じ時ansの1列を見て小さい方を先に並び替える。
#[[5, 3], [5, 6], [4, 2], [3, 0], [3, 4], [1, 1], [0, 5]]

ans=sorted(ans, key=itemgetter(0))  #ansの0列に対して小さい順に並べて、同じ時ansの1列を見て大きい方を先に並び替える。
#[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]]

・例題
atcoder.jp

・例題の実装例

n=int(input())
from operator import itemgetter
cnt_idx=[i for i in range(n)]
cnt=[0]*n

for i in range(n):
    ox=input()   
    for j in range(n):
        if ox[j]=='o':
            cnt[i]+=1
            
ans=[]
for i in range(n):
    ans.append([cnt[i], cnt_idx[i]])
    
ans=sorted(ans, key=itemgetter(0), reverse=True)  

for i in range(n):
    print(ans[i][1]+1, end=" ")