※ 引述《JetaimeMia (你好)》之銘言:
: 各位大大好
: 小魯現在有個多維排序的問題
: 假設有2個list或array
: 每一個裡面又有3*3的元素
: e.g.
: a=[ [9,8,7], [6,5,4], [3,2,1]]
: b=[ [11,12,13], [14,15,16], [17,18,19]]
: 我要如何讓b照著a來排序
: 結果希望像是
: [[13,12,11],
: [7,8,9]]
: 或是
: [[13,7],[12,8],[11,9]]之類的
: 總之就是一個多維array或list照著另一個來排序
: 用了sort, sorted,等等在這種多維的情況下不知道是我哪裡寫錯還是怎樣
: 排不太出來
: 原本是用一個一個抓出來變一維的再排序的方法
: 不過在我的code裡面數據一大就會跑得很慢
: 希望能直接改了再取出來這樣
: 小魯先謝謝各位了
def dim_sorted(data, key):
'''
>>> a = (0,1,3,5,8); b = (5,6,4,2,3)
>>> f(a, b)
(5, 8, 3, 0, 1)
>>> a = ((0,1,2),(3,4,5)); b = ((2,1,3), (2,3,1))
>>> f(a, b)
((1, 0, 2), (5, 3, 4))
'''
assert len(data)==len(key)
if hasattr(data[0], '__iter__'):
return tuple(map(dim_sorted, data, key))
else:
return tuple(data[i] for i,v in sorted(enumerate(key), key=lambda t:t[1]))
How about this?