python - 对一个列表进行排序,使两个列表具有正确的顺序对应关系

标签 python list sorting numpy dictionary

我有两个列表,例如

coords = [2, 0, 1, 4, 3]
value = [1, 9, 3, 3, 0]

其中第一个是一系列坐标,第二个是与坐标对应的一系列值,例如坐标'2'对应于值'1',坐标'0'给出值'9'

现在,我想对坐标进行排序保持的顺序不变,以便最小的坐标 元素对应于 value 中的最小元素,依此类推。所需的输出将是:

coords_new = [1, 4, 2, 3, 0]
value = [1, 9, 3, 3, 0] # unchanged

其中 '0' -> '0'、'1' -> '1'、'2' -> '3'、'3' -> '3'、'4' -> '9 '。 有什么想法可以做到这一点吗?您可以返回coords_new,或将coords重新排序的索引作为答案。

编辑: 如果可能的话,我更希望我们可以返回重新排序原始坐标的索引,即返回 idx,使得 coords[idx] = coords_new。

非常感谢!

志豪

最佳答案

一种替代方法是首先创建对象之间的映射,然后将此映射与索引结合使用:

coords = [2, 0, 1, 4, 3]
value = [1, 9, 3, 3, 0]

table = {k: v for k, v in zip(sorted(coords), sorted(value))}
print(table)
print(sorted(coords, key=lambda e: value.index(table[e])))

输出

{0: 0, 1: 1, 2: 3, 3: 3, 4: 9}
[1, 4, 2, 3, 0]

注意

此方法假设coords仅包含唯一值。对于一般情况,您可以生成映射对 (c, v) 并按 value 中 v 的索引值排序:

pairs = [(k, v) for k, v in zip(sorted(coords), sorted(value))]
result = [k for k, _ in sorted(pairs, key=lambda e: value.index(e[1]))]

print(result)

输出

[1, 4, 2, 3, 0]

关于python - 对一个列表进行排序,使两个列表具有正确的顺序对应关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338454/

相关文章:

python - 检查字符串是否为 None、空或仅包含空格

python - python 中的 os.path.join 返回 'wrong' 路径?

python - 无法使用 Python 游标从存储过程返回结果

python - 为什么 NUMPY correlate 和 corrcoef 返回不同的值以及如何在 "normalize"模式下关联 "full"?

python - 使用 3 个参数在 python 中扩展切片

java - 与数组列表和 toString 方法相关

java - "Relative"类属性引用

ios - 按日期排序的 Xcode UITableView 部分和行(来自 mutableArray)

javascript - 为什么这个 JavaScript 函数被调用两次?

PHP/MySQL 需要将两个表中的数据合并到一个对象并按日期排序