在表格中排序列(列表的列表)并保留行的对应关系
举个例子:
list1 = ['c', 'b', 'a']
list2 = [3, 2, 1]
list3 = ['11', '10', '01']
table = [list1, list2, list3]
我想根据第一列(list1)来排序,但我希望最终的排序结果能保留原来的行顺序(也就是说,排序后我仍然希望有一行是'b', 2, '10')。在这个例子中,我可以单独对每个列表进行排序,但我的数据不允许我这样做。那用Python有什么好的方法呢?
2 个回答
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是如何对元组列表进行排序的。
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')]