擅长:python、mysql、java
<p>我们可以利用<code>Order</code>被排序的事实,在得到<em>区间索引</em>后,简单地切片<code>Letters</code>,如下所示-</p>
<pre><code>def numpy_slice(Order, Letters):
Order = np.asarray(Order)
Letters = np.asarray(Letters)
idx = np.flatnonzero(np.r_[True,Order[:-1]!=Order[1:],True])
return {Order[i]:Letters[i:j] for (i,j) in zip(idx[:-1],idx[1:])}
</code></pre>
<p>样本运行-</p>
<pre><code>In [66]: Order
Out[66]: array([16, 16, 16, 16, 23, 30, 33, 33, 39, 39, 39, 39, 39, 39, 39])
In [67]: Letters
Out[67]:
array(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O'], dtype='<U1')
In [68]: numpy_slice(Order, Letters)
Out[68]:
{16: array(['A', 'B', 'C', 'D'], dtype='<U1'),
23: array(['E'], dtype='<U1'),
30: array(['F'], dtype='<U1'),
33: array(['G', 'H'], dtype='<U1'),
39: array(['I', 'J', 'K', 'L', 'M', 'N', 'O'], dtype='<U1')}
</code></pre>