首页 > 解决方案 > 根据行和列对矩阵中的所有元素进行排名

问题描述

假设我有一个矩阵(Python 中的二维列表),我想创建另一个矩阵,其中所有元素的排名基于它们所在的行和列。条件是:

  1. 排名应该从1开始
  2. 应为同一行或同一列中的相同元素提供相同的排名
  3. 如果相同的元素基于其特定的行或列排名位于不同的行或列中,则它们可能具有不同的排名
  4. 最大等级应尽可能小

假设给出的 5X5 矩阵是:

18, 25, 7, 11, 11
33, 37, 14, 22, 25
29, 29, 11, 14, 11
25, 25, 14, 14, 11
29, 25, 14, 11, 7

预期的输出是:

3, 4, 1, 2, 2
6, 7, 3, 4, 5
5, 5, 2, 3, 2
4, 4, 3, 3, 2
5, 4, 3, 2, 1

如何用 Python 或任何编程语言编写此代码,或者解决此问题的算法是什么?

标签: pythonmatrix

解决方案


尝试使用这个嵌套列表推导:

print([[sorted(set(i)).index(x) + 1 for x in i] for i in l])

输出:

[[3, 4, 1, 2, 2], [4, 5, 1, 2, 3], [3, 3, 1, 2, 1], [3, 3, 2, 2, 1], [5, 4, 3, 2, 1]]

推荐阅读