列表比较包括索引


array_one = [1, 2, 3, 4]
array_two = [6, 7, 1, 2, 17, 23, 3, 48, 4]
lc = [e for e in array_one if e in array_two]

到目前为止一切顺利,我找到了我想要的值。对我来说,下一个重要的步骤是获得找到的项目的索引。

我试着

lc_2 = [index for index, (e1, e2) in enumerate(zip(array_one, array_two)) if e1 == e2]

但是结果不是我需要的,或者我没有正确理解它们。

长话短说:如果能找到有相应索引的重复条目就好了。

它必须是一个灵活的系统,因为在某些情况下我有2个匹配,有时是3个,有时是1个。

假设array_two中的值唯一,则可以用index查找array_twoarray_one中值的索引。例如,这个列表推导式将为array_one中同时存在于array_two中的每个值生成一个元组(value,索引在array_one中,索引在array_two中)的列表:

array_one = [1, 2, 3, 4]
array_two = [6, 7, 1, 2, 17, 23, 3, 48, 4]
lc_2 = [(e, i, array_two.index(e)) for i, e in enumerate(array_one) if e in array_two]
print(lc_2)

输出:

[(1, 0, 2), (2, 1, 3), (3, 2, 6), (4, 3, 8)]

您可以在numpy中轻松地完成:

import numpy
values, indices_one, indices_two = numpy.intersect1d(array_one, array_two, return_indices=True)

相关内容

  • 没有找到相关文章

最新更新