我目前正在开发一个高性能的Python2.7项目,它利用了数万个大小不等的元素。显然,每一次手术都必须尽快进行。在
所以,我有两个列表:一个是一个由任意数组成的列表,我们称之为a,另一个是一个以1开头的线性列表,长度与第一个列表相同,名为B,表示a中的索引(从1开始)
比如枚举,从1开始。在
例如:A = [500, 300, 400, 200, 100] # The order here is arbitrary, they can be any integers, but every integer can only exist once
B = [ 1, 2, 3, 4, 5] # This is fixed, starting from 1, with exactly as many elements as A
如果我有一个B元素(称为e_B),并且希望A中有对应的元素,我可以简单地做correspond_e_A = A[e_B - 1]。没问题。在
但是现在我有一个很大的随机的非唯一整数列表,我想知道a中的整数的索引,以及B中对应的元素是什么。在
我想我对第一个问题有一个合理的解决办法:
^{pr2}$
这种方法的优点是不需要map()单个操作,numpy的inad只返回一个列表,比如[True,True,False,True,…]。使用nonzero()我可以得到随机表中存在于A.Perfect中的元素的索引。在
但对于第二个问题,我被难住了。
我试过这样的方法:corresponding_e_B = map(lambda x: numpy.where(A==x)[0][0] + 1, random_list))
这给了我正确的索引,但它不是最优的,因为首先我需要一个map(),其次我需要一个lambda,最后纽比。在哪里()在项被找到一次之后不会停止(请记住,A只有唯一的元素),这意味着它在像我这样的大型数据集中伸缩得非常厉害。在
我查看了bisect,但它似乎只适用于单个请求,而不适用于列表,这意味着我仍然必须使用map()并构建我的list elementwise(这很慢,不是吗?)在
因为我对Python比较陌生,所以我希望这里的任何人都能有个主意?也许是我还不知道的图书馆?在