2014-12-06 105 views
-1

我有一個二維表:Python的2D列表排序

['C', 'A', 'D', 'B'], #header row 
['F', 'C', 'F', 'E'], #row 1 
['F', 'E', 'F', 'F'], #row 2 
['B', 'A', 'F', 'A'], 
['A', 'F', 'C', 'E'], 
['F', 'F', 'E', 'E'], 
['C', 'E', 'F', 'C'] 

該列表中的第一行是標題行:C,A,d,B. 我怎樣才能改變這種做法,列是爲了因此會顯示:

['A', 'B', 'C', 'D'], #header row 
['C', 'E', 'F', 'F'], #row 1 
['E', 'F', 'F', 'F'], #row 2 
['A', 'A', 'B', 'F'], 
['F', 'E', 'A', 'C'], 
['F', 'E', 'F', 'E'], 
['E', 'C', 'C', 'F'] 

我想要的標題是爲了A,B,C,d也與頭下方移動列

+1

使用''''zip''轉置數據,轉置列表的第一項'''sort''',將其轉換回原始形式。請發佈您正在使用的代碼。 – wwii 2014-12-06 15:15:52

回答

2

您可以使用sortedzip,首先創建列的列表,zip(*a)然後對其進行排序(基於第一指數)與sorted,並再次轉換到第一狀態,以zip和轉換指標與map列出:

>>> map(list,zip(*sorted(zip(*a)))) 
[['A', 'B', 'C', 'D'], 
['C', 'E', 'F', 'F'], 
['E', 'F', 'F', 'F'], 
['A', 'A', 'B', 'F'], 
['F', 'E', 'A', 'C'], 
['F', 'E', 'F', 'E'], 
['E', 'C', 'C', 'F']] 
0

你可以使用numpy的。

>>> import numpy as np 
>>> data = np.array([['C', 'A', 'D', 'B'], #header row 
... ['F', 'C', 'F', 'E'], #row 1 
... ['F', 'E', 'F', 'F'], #row 2 
... ['B', 'A', 'F', 'A'], 
... ['A', 'F', 'C', 'E'], 
... ['F', 'F', 'E', 'E'], 
... ['C', 'E', 'F', 'C']]) 
>>> data[:,np.argsort(data[0])] # select sorted indices of first row as column indices. 
array([['A', 'B', 'C', 'D'], 
     ['C', 'E', 'F', 'F'], 
     ['E', 'F', 'F', 'F'], 
     ['A', 'A', 'B', 'F'], 
     ['F', 'E', 'A', 'C'], 
     ['F', 'E', 'F', 'E'], 
     ['E', 'C', 'C', 'F']], 
     dtype='|S1')