给定以下数组:
array = [-1, -1, -1, -1, -1, -1, 3, 3, -1, 3, -1, -1, 2, 2, -1, -1, 1, -1]
indexes 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
字符串
我需要找到出现相同数字的索引。在这个例子中,这将返回一个列表列表,如下所示:
list(list(), list(16), list(12, 13), list(6, 7, 9), list() etc...)
0 1 \ 2 3 4
^ \
\ \ the index in the array at which "1" appears
\
\ the numbers in the array
型
在Numpy中如何做到这一点?
数字1出现在索引16处
数字2出现在索引12、13处
等等。
基于评论的注解:
- -1可以忽略,我只对剩下的感兴趣
- 数组有~50个元素,最大值为int(500)
- 该函数将被调用6000+次。
6条答案
按热度按时间wd2eg0qa1#
对于
O(n)
time* 中的解决方案,使用字典收集索引:字符串
输出量:
型
O(k*log(k))
其中k
是唯一值的数量(如果需要排序输出)对于列表列表:
型
输出量:
型
替代
或者一个非常简单的方法,如果你预先初始化输出:
型
所有方法的比较
python是最快的。
初始数组使用
np.random.randint(0, k, size=n).tolist()
生成,其中n
是数组的长度,k
是数组中的最大值。k=4
:x1c 0d1x的数据
k=100
:的
k=10_000
:的
k0pti3hp2#
字符串
pkmbmrz73#
一个numpy解决方案:
字符串
印刷品:
型
dluptydi4#
采用
itertools.groupby
+operator.itemgetter
方法:个字符
hiz5n14c5#
@talha-tayyab的答案将工作,如果你只需要考虑 do 出现在数组中的值,但是,如果你需要从
value=0
开始并递增到最高值,这应该可以工作。字符串
chhqkbe16#
另一种可能的解决方案:
字符串
输出量:
型