擅长:python、mysql、java
<p>不完全确定您想要实现什么,但是您可以使用<code>bisect</code>在阈值列表中进行二进制搜索,以找到刚好低于给定数字的阈值</p>
<pre><code>retention = [0.19, 1, 0.57, 5, 0.09]
threshold = [0.123, 0.108, 0.102, 0.087]
threshold = [0] + sorted(threshold) # add 0 and sort
bins = {t: [] for t in threshold}
for r in retention:
k = bisect.bisect(threshold, r) # actually, this is the next threshold
bins[threshold[k-1]].append(r) # thus k-1 here to get the lower one
# {0: [], 0.087: [0.09], 0.102: [], 0.108: [], 0.123: [0.19, 1, 0.57, 5]}
</code></pre>
<p>与另一个<code>bisect</code>答案(这会产生非常不同的输出)一样,对于<code>retention</code>中的k个元素,每个查询的复杂性是O(logn),n是阈值的数目,总共O(klogn)</p>