我有一个列表,看起来像这样:
l = [[1, 2, 3],
[3, 5, 4],
[9, 8, 7]]
Run Code Online (Sandbox Code Playgroud)
我想对每个子列表中的相应元素进行排序,以便中间子列表按降序排列,这将导致:
l = [[2, 3, 1],
[5, 4, 3],
[8, 7, 9]]
Run Code Online (Sandbox Code Playgroud)
第二个列表现在正在下降:[5, 4, 3].基本上,我想重新排序2D表示中的垂直列.这似乎是一件容易的事,但我很难找到解决方案.
到目前为止我试过:
from operator import itemgetter
sorted(l, key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)
这没有改变任何东西,我试过
print(l.sort(key = lambda row: (row[1])))
Run Code Online (Sandbox Code Playgroud)
没有.
您所做的尝试将按第二列中的值排序,但您希望按第二行中的值排序.因此,转换列表,按列排序,然后转置回来.
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
奖金提示:您的print(l.sort(...方法打印,None因为sort不返回任何内容,它就地排序.所以你应该做l.sort(...),然后做print(l).相反,您的sorted(l, ...)尝试似乎没有做任何事情,因为它没有就地排序,而是返回一个全新的列表.我猜你做了sorted(l, ...)然后print(l)并且惊讶地看到没有任何改变.你可能反而做l = sorted(l, ...),然后print(l).(虽然只是使用sort会更加惯用)