将随机浮点数列表转换为最接近的定义整数集

Converting list of random floats to nearest defined set of integers

将伪随机浮点数转换为有限整数值集中最接近的值的simplest/Pythonic方法是什么?

例如,给定值 [0.123, 2.234, 8.222]finite set {1, 2, 3}

我想要 [1, 2, 3]

的输出列表

如果您不介意使用 numpy 模块,

import numpy as np

vals = [0.123, 2.234, 8.222]
ints = [1, 2, 3]

output = [ints[np.argmin([abs(x - y) for x in ints])] for y in vals]

可以完成这项工作。如果您按降序 (ints = [3, 2, 1]) 对 ints 进行排序,则 1.5 将映射到 2.

这比评论中介绍的二分算法效率低(而且也不漂亮!),但无论如何我想这个算法很容易实现和理解。