我有两个数字列表A列表和列表B
我想将列表A中的每个数字映射到列表B中的数字。该数字是列表B中列表A超出的最接近的数字。
例如,如果我在列表A中有数字5并且列表B中有数字3和6,那么我希望数字5映射到3。
我意识到我可以通过将列表A中的每个数字与列表B中的每个数字之间的差异然后建立索引来实现这一点,但是我的列表A和列表B非常长,并且想知道是否有更有效的方法走吧。
谢谢!
答案 0 :(得分:0)
你说你正在寻找比获得差异更快的东西。如果您查看this答案,该答案计算O(n)
中单个项目的最接近值,则您的列表只需O(n^2)
,这非常快。您的解决方案如下所示:
>>> A = [100, 7, 9]
>>> B = [2, 5, 6, 8, 123, 12]
>>> [min(A, key=lambda x: 2**16 if x > y else abs(x-y)) for y in B]
[12, 6, 8]
2**16
有点脏,但完成了工作。