迅速で汚い解決策。クイックソートが次のようになっている場合:
def qsort(lst):
if len(lst) == 0:
return []
else:
pivot = lst[0]
lesser = qsort([x for x in lst[1:] if x < pivot])
greater = qsort([x for x in lst[1:] if x >= pivot])
return lesser + [pivot] + greater
インデックス変数を使用して、必要なディメンションで並べ替えることができます。
def qsort_index(lst, index):
if len(lst) == 0:
return []
else:
pivot = lst[0]
lesser = qsort_index([x for x in lst[1:] if x[index] < pivot[index]], index)
greater = qsort_index([x for x in lst[1:] if x[index] >= pivot[index]], index)
return lesser + [pivot] + greater
>>> qsort_index(myresults, 0)
[[1, 'A', 2], [2, 'Z', 1], [3, 'J', 0]]
>>> qsort_index(myresults, 1)
[[1, 'A', 2], [3, 'J', 0], [2, 'Z', 1]]
>>> qsort_index(myresults, 2)
[[3, 'J', 0], [2, 'Z', 1], [1, 'A', 2]]
この実装は最適とはほど遠いですが、アイデアは得られたと思います。