交叉引用列表的索引

时间:2016-04-07 11:22:14

标签: python numpy

我正在交叉引用两个列表来查找两个列表之间重合的项目。第一个列表orig的大小为32个项目,我将其与更大的列表sdss进行交叉引用,其大小为112,000个项目。到目前为止,这就是我所拥有的:

for i in range(0,len(orig),1):
    if orig[i] in sdss:
        print('\n %s' % (orig[i]))

这给了我两个列表之间相同的项目,但是,如何有效地返回sdss列表(较大列表)中交叉引用项的索引(或位置)?

编辑:我想我应该更清楚了。我实际上是用int来交叉引用两个数组,而不是字符串。

2 个答案:

答案 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)),因为您的开始和步骤参数已经是默认值。