首页 > 解决方案 > Identify index of all elements in a list comparing with another list

问题描述

For instance I have a list A:

A = [100, 200, 300, 200, 400, 500, 600, 400, 700, 200, 500, 800]

And I have list B:

B = [100, 200, 200, 500, 600, 200, 500]

I need to identify the index of elements in B with comparison to A

I have tried:

list_index = [A.index(i) for i in B]

It returns:

[0, 1, 1, 5, 6, 1, 5]

But what I need is:

[0, 1, 3, 5, 6, 9, 10]

How can I solve it?

标签: pythonpython-3.x

解决方案


You can iterate through the enumeration of A to keep track of the indices and yield the values where they match:

A = [100,200,300,200,400,500,600,400,700,200,500,800]
B = [100,200,200,500,600,200,500]

def get_indices(A, B):
    a_it = enumerate(A)
    for n in B:
        for i, an in a_it:
            if n == an:
                yield i
                break
            
list(get_indices(A, B))
# [0, 1, 3, 5, 6, 9, 10]

This avoids using index() multiple times.


推荐阅读