根据特定列对Python中的列表列表进行排序

时间:2016-10-21 12:42:40

标签: python sorting

我有一个列表如下:

l = [[1, 2, 3], 
     [3, 5, 4], 
     [9, 8, 7]]

我想对每个子列表中的相应元素进行排序,以便中间子列表按降序排列,这将导致:

l = [[2, 3, 1],
     [5, 4, 3], 
     [8, 7, 9]]

第二个列表现在正在下降:[5, 4, 3]。基本上,我想重新排序2D表示中的垂直列。这似乎是一件容易的事,但我很难找到解决方案。

到目前为止,我试过了:

from operator import itemgetter
sorted(l, key=itemgetter(1))

没有改变任何东西,我试过

print(l.sort(key = lambda row: (row[1])))

给了无。

1 个答案:

答案 0 :(得分:6)

您所做的尝试将按第二列中的值排序,但您希望按第二行中的值排序。因此,转换列表,按列排序,然后转置回来。

>>> l = [[1, 2, 3], [3, 5, 4], [9, 8, 7]]
>>> transposed_l = zip(*l)
>>> transposed_l.sort(key=lambda x: x[1], reverse=True)
>>> l = zip(*transposed_l)
>>> l
[(2, 3, 1), (5, 4, 3), (8, 7, 9)]

额外提示:您的print(l.sort(...方法已打印None因为sort没有返回任何内容,因此会就地排序。因此,您应该l.sort(...)然后print(l)。相反,您的sorted(l, ...)尝试似乎没有做任何事情,因为它没有就地排序,而是返回一个全新的列表。我猜你做了sorted(l, ...)然后print(l)并且惊讶地看到没有任何改变。您可以改为l = sorted(l, ...)然后print(l)。 (虽然只使用sort会更加惯用)