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

ste*_*ste 5 python sorting

我有一个列表,看起来像这样:

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)

没有.

Kev*_*vin 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)]
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会更加惯用)