我正在尝试完成以下任务,但到目前为止失败了。我有两个排序的数字列表。说
A = [5.8, 6.5, 7.6, 14.5, 18.1, 25.7, 26.4, 30.7, 30.9, 33.6, 38.6, 38.8, 39.2]
B = [9.0, 13.5, 22.5, 32.3 40.6, 43.2, 47.9, 54.2, 60.3, 63.0]
我想做一个列表列表。每个列表包含一个与 B 不同的值,以及 A 中介于该 B 值和列表中紧邻它之前的值之间的所有值。第一个列表只包含小于 B 中第一个值的所有内容。
所以在这种情况下,列表的列表应该开始
[[5.8, 6.5, 7.6, 9.0], [13.5], [14.5, 18.1, 22.5], [25.7, 26.4, 30.7. 30.9, 32.3]....]
如果 numpy 代码更简单/更快,我会很高兴。
我试过:
[[*a, b] for b, a in itertools.groupby(A, lambda x: next(filter(lambda y: y >= x, B)))]
但它错过了所有单例列表,我不确定它在任何情况下的速度有多快。
请您参考如下方法:
我会像这样使用两个指针,
i = 0
j= 0
ans = [] #contains the lists of lists
while j<len(B):
to_append = []
while i<len(A) and A[i]<=B[j]:
to_append.append(A[i])
i=i+1
to_append.append(B[j])
ans.append(to_append)
j=j+1
立即尝试
