Python 查找一个列表中的任何元素出现在另一个列表中的索引(具有重复项)
Python新手,来自MATLAB。我的问题与这篇文章()非常相似,但有一些我无法完全合并的调整(即管理重复项和缺少的值) 按照这个例子,我有两个列表,草堆和针:Python 查找一个列表中的任何元素出现在另一个列表中的索引(具有重复项),python,python-3.x,Python,Python 3.x,Python新手,来自MATLAB。我的问题与这篇文章()非常相似,但有一些我无法完全合并的调整(即管理重复项和缺少的值) 按照这个例子,我有两个列表,草堆和针: haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K'] needles = ['F', 'G', 'H', 'I', 'F', 'K'] 然而,干草堆和针都是日期列表。我需要为草堆中的每个针叶元素创建草堆中的索引列表,以便: result = [5, 6, 7, n
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
然而,干草堆和针都是日期列表。我需要为草堆中的每个针叶元素创建草堆中的索引列表,以便:
result = [5, 6, 7, nan, 5, 9]
我的问题与发布的示例之间的两大区别是:
1.我的针头上有重复的针头(haystack没有任何重复的针头),这就意味着我不能使用set()
2.在极少数情况下,Piners中的元素可能不在haystack中,在这种情况下,我希望插入nan(或其他占位符)
到目前为止,我已经得到了这个(这对于干草堆和针有多大来说还不够有效):
据我所知,该代码符合我的要求,但速度不够快。更有效的替代方案?这个怎么样
results=[]
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
for n in needles:
if n in haystack:
results.append(haystack.index(n))
else:
results.append("NaN")
print (results)
或方法2:
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
results=[]
def getInd(n, haystack):
if n in haystack:
return haystack.index(n)
else:
return "NaN"
for n in needles:
results.append(getInd(n, haystack))
print (results)
如果您的数组非常大,那么制作一个字典来索引干草堆可能是值得的:
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
hayDict = { K:i for i,K in enumerate(haystack) }
result = [ hayDict.get(N,np.nan) for N in needles]
print(result)
# [5, 6, 7, nan, 5, 9]
这是答案的副本,答案是简单的
[haystack.index(x)如果x在haystack中,那么x在针中就没有了]
谢谢!之前所有的回答都正确,但这一个被证明是最快的。感谢所有的回复!
haystack = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
needles = ['F', 'G', 'H', 'I', 'F', 'K']
hayDict = { K:i for i,K in enumerate(haystack) }
result = [ hayDict.get(N,np.nan) for N in needles]
print(result)
# [5, 6, 7, nan, 5, 9]