2014-12-06 143 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')