我正在交叉引用两个列表来查找两个列表之间重合的项目。第一个列表orig
的大小为32个项目,我将其与更大的列表sdss
进行交叉引用,其大小为112,000个项目。到目前为止,这就是我所拥有的:
for i in range(0,len(orig),1):
if orig[i] in sdss:
print('\n %s' % (orig[i]))
这给了我两个列表之间相同的项目,但是,如何有效地返回sdss
列表(较大列表)中交叉引用项的索引(或位置)?
答案 0 :(得分:3)
如果顺序不重要,您可以使用set intersection查找唯一的公共元素和列表理解,以将索引和元素作为元组
[(sdss.index(common_element),common_element) for common_element in set(orig) & set(sdss)]
请注意"索引"如果在列表中找不到该值,则引发ValueError,但在这种情况下,值将存在于sdss中。所以,不必担心不存在的元素会抛出错误。
您也可以使用numpy.intersect1d
答案 1 :(得分:0)
您可以使用.find()
给出列表中项目的索引,但失败时返回-1:
for item in orig:
index = sdss.find(item)
if index != -1:
print("\n %d" % index)
我修改了你的迭代方式,因为你不需要orig
中的索引;你需要每个项目。顺便说一下,您可以使用range(len(orig))
,因为您的开始和步骤参数已经是默认值。