2011-07-01 79 views
4

。例如對應:排序表中的列(列出的清單),同時保留行

list1 = ['c', 'b', 'a'] 
list2 = [3, 2, 1] 
list3 = ['11', '10', '01'] 
table = [list1, list2, list3] 

我想相對於第一列(列表1)進行排序,但我像最後的命令仍然保留行(所以排序後,我仍然有一條'b',2,'10')。在這個例子中,我可以單獨對每個列表進行排序,但使用我的數據我不能這樣做。 pythonic方法是什麼?

回答

6

一個快速的方法是使用zip

>>> from operator import itemgetter 
>>> transpose = zip(*table) 
>>> transpose.sort(key=itemgetter(0)) 
>>> table = zip(*transpose) 
>>> table 
[('a', 'b', 'c'), (1, 2, 3), ('01', '10', '11')] 
+2

在[FMc]上R a一下(http://stackoverflow.com/questions/6542399/sorting-columns-in-a-table-list-of-lists-whilst-preserving-the-correspondence-o/6542819 #6542819)使用'sorted',這裏是上面的一行:'table = zip(* sorted(zip(* table),key = itemgetter(0)))''。 – senderle

1
# Get a list of indexes (js), sorted by the values in list1. 
js = [t[1] for t in sorted((v,i) for i,v in enumerate(list1))] 

# Use those indexes to build your new table. 
sorted_table = [[row[j] for j in js] for row in table] 

有關Python如何排序元組的列表信息,請參閱this question

相關問題