Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找一个列表中的任何元素出现在另一个列表中的索引(具有重复项)_Python_Python 3.x - Fatal编程技术网

Python 查找一个列表中的任何元素出现在另一个列表中的索引(具有重复项)

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

Python新手,来自MATLAB。我的问题与这篇文章()非常相似,但有一些我无法完全合并的调整(即管理重复项和缺少的值)

按照这个例子,我有两个列表,草堆和针:

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]