我有一个列表如下:
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])))
给了无。
答案 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
会更加惯用)