joh*_*nry 8 python sorting list
这些是我需要在列表列表中执行的逻辑步骤
a = [[5,2],[7,4],[0,3]]
Run Code Online (Sandbox Code Playgroud)
以这样的方式对列表列表进行排序,使输出看起来像
7,5,4,3,2,0
Run Code Online (Sandbox Code Playgroud)获取原始列表中已排序元素的坐标,在这种情况下应该生成输出
(1,0)
(0,0)
(1,1)
(2,1)
(0,1)
(2,0)
Run Code Online (Sandbox Code Playgroud)我尝试使用sort, sorted
和argwhere
以不同的方式,但我没有得到明智的结果,我想首先是因为sort
并且sorted
可以一次只跟踪一个轴排序列表
创建一个字典,其中键作为实际坐标,值作为数字本身,如下所示
>>> a = [[5, 2], [7, 4], [0, 3]]
>>> positions = {
... (idx1, idx2): col
... for idx1, row in enumerate(a)
... for idx2, col in enumerate(row)
... }
>>> positions
{(0, 1): 2, (2, 0): 0, (0, 0): 5, (1, 0): 7, (1, 1): 4, (2, 1): 3}
Run Code Online (Sandbox Code Playgroud)
现在,positions
根据它们的值对键(坐标)进行排序,就像这样
>>> sorted(positions, key=positions.get, reverse=True)
[(1, 0), (0, 0), (1, 1), (2, 1), (0, 1), (2, 0)]
Run Code Online (Sandbox Code Playgroud)
此代码适用于列表列表.内部列表的长度不必相同.
在每个级别,我们使用enumerate
列表项及其索引迭代列表.在顶层,每个项目是另一个列表,内部循环遍历每个列表以获取它们的索引和值,将索引(作为元组)存储在也包含该值的元组中.然后,我们对值的结果列表中的元组(b
)进行排序,然后将其拆分zip
为所有索引的元组和值的元组.
from operator import itemgetter
a = [[5, 2], [7, 4], [0, 3]]
b = [((i, j), v) for i, t in enumerate(a) for j, v in enumerate(t)]
b.sort(key=itemgetter(-1), reverse=True)
print(b)
coords, vals = zip(*b)
print(vals)
print(coords)
Run Code Online (Sandbox Code Playgroud)
产量
[((1, 0), 7), ((0, 0), 5), ((1, 1), 4), ((2, 1), 3), ((0, 1), 2), ((2, 0), 0)]
(7, 5, 4, 3, 2, 0)
((1, 0), (0, 0), (1, 1), (2, 1), (0, 1), (2, 0))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
630 次 |
最近记录: |