Python新手,来自MATLAB。我的问题与这篇文章(Find the indices at which any element of one list occurs in another)非常相似,但有一些我无法完全融入的调整(即管理重复和丢失的值)。在
在这个例子之后,我有两个列表,草堆和针:
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
然而,干草堆和针都是日期列表。我需要为haystack中针的每个元素创建一个索引列表,以便:
^{pr2}$我的问题和发布的示例之间的两大区别是: 1我有重复的针(干草堆没有任何重复),这是我可以说的,这意味着我不能使用set() 2在极少数情况下,针中的元素可能不在haystack中,在这种情况下,我想插入一个nan(或其他占位符)
到目前为止,我得到了这个(对于草堆和针头有多大还不够有效):
import numpy as np
def find_idx(a,func):
return [i for (i,val) in enumerate(a) if func(val)]
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
result=[]
for x in needles:
try:
idx = find_idx(haystack, lambda y: y==x)
result.append(idx[0])
except:
result.append(np.nan)
据我所知,这段代码可以满足我的需要,但速度不够快。更有效的替代品?在
如果您的数组非常大,可能值得编写一个字典来索引干草堆:
这个怎么样?在
或方法2:
^{pr2}$相关问题 更多 >
编程相关推荐