从排序列表中获取大于给定数字的第一个元素

jpt*_*jpt 4 python arrays sorting numpy list

我有两个清单。列表 B 就像一个数据库,我需要将列表 A 的每个元素与它一一比较。可以说

B = [0.6, 1.7, 3, 4.5]
A = [0.6, 0.9, 1.2, 1.5, 2, 2.5, 3, 4, 4.5]
Run Code Online (Sandbox Code Playgroud)

B 是一个排序列表,因此对于每个 A[i],每当算法在 B 中找到 >= A[i] 的数字时,它应该将其作为输出返回。所以我的输出应该是这样的:

C = [0.6, 1.7, 1.7, 1.7, 3, 3, 3, 4.5, 4.5]
Run Code Online (Sandbox Code Playgroud)

您能否建议我最简单的解决方案,尽可能避免嵌套循环?

jpp*_*jpp 5

如果您可以使用 3rd 方库,一种解决方案是 NumPy,通过np.searchsorted

import numpy as np

B = np.array([0.6, 1.7, 3, 4.5])
A = [0.6, 0.9, 1.2, 1.5, 2, 2.5, 3, 4, 4.5]

res = B[np.searchsorted(B, A)]

array([ 0.6,  1.7,  1.7,  1.7,  3. ,  3. ,  3. ,  4.5,  4.5])
Run Code Online (Sandbox Code Playgroud)

这将比顺序循环或基于bisect标准库的算法更有效。