此代码适用于列表列表。内部列表的长度不必相同。
在每个级别,我们使用迭代列表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)
output
[((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))