假设我有一个矩阵(Python 中的二维列表),我想创建另一个矩阵,其中所有元素的排名基于它们所在的行和列。条件是:
- 排名应从 1 开始
- 应为同一行或同一列中的相同元素提供相同的排名
- 如果相同的元素根据其特定的行或列排名位于不同的行或列中,则它们可能具有不同的排名
- 最大排名应尽可能小
假设给出的 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 或任何编程语言编写此代码,或者解决此问题背后的算法是什么?
最佳答案
尝试使用此嵌套列表理解:
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]]
关于python - 根据行和列对矩阵中的所有元素进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087917/