整数 n, m, k と n 行 m 列の表 a が与えられます。以下の条件をすべて満たすように、 a を行単位でソートしてください。
・ a の k 列目が昇順になっている
・ a の k 列目の値が等しい 2 つの行では、 a の 1 列目の値が昇順になっている
・ a の k 列目 と a の 1 列目から i 列目までのすべての値が等しい 2 つの行では、 a の i + 1 列目の値が昇順になっている ( 1 ≦ i ≦ m - 1 )
要約すると、初めにk列目で昇順にソートし、ソート済みの列の値が重複する行がある時は、値が重複する行が無くなるまで、1番目の列から順次最終列まで昇順にソートし直す、という感じです。
n, m, k = map(int, input().split())
k -= 1
a = []
for i in range(n):
row = list(map(int, input().split()))
a.append(row)
a.sort(key=lambda x: ([x[k]] , x[:k] , x[k + 1:]))
for i in a:
print(*i)
リストをスライスし、lambda関数を用いて、ソート順を順序良く並べればうまくいきました。