如何在包含相同元素的另一个列表中找到一个列表的元素索引?

时间:2020-10-21 17:20:38

标签: python list

我正在尝试使用python这个简单的任务(较大项目的一部分)进行编码:

我有两个列表,其中第一个列表,例如A = [1, 2, 3, 4, 5, 6]已排序,而第二个列表,例如B = [3, 4, 1, 6, 2, 5]未排序。我要实现的是获取列表A中排序列表B的每个元素的索引值。例如,当我搜索元素i = 3时,我想给出索引A[5] = 6的结果。我已经通过以下简单方式实现了:

for i in range(6):
    for j in range(6):
        if A[i] == B[j]:
            index = j

我想提出一种将其减少到仅一个循环而不是这两个嵌套的for循环的方法。

4 个答案:

答案 0 :(得分:1)

如果您知道B中的所有值都是唯一的,则一种方法是创建一个字典,将B中的值映射到它们的索引。

b_dict = {}
for i, b in enumerate(B):
    b_dict[b] = i

然后,在A上循环并从b_dict获取所有值。

a_indices = [b_dict[a] for a in A]

有了您的列表,我们得到了

A: [1, 2, 3, 4, 5, 6]
B: [3, 4, 1, 6, 2, 5]
a_indices: [2, 4, 0, 1, 5, 3]

此解决方案是O(n),而其他解决方案是O(n ^ 2),因此在大型列表上会更快。

答案 1 :(得分:0)

您可以使用list.index()方法在列表中查找特定元素的索引:

indices = {}
for elem in A:
    indices[elem] = B.index(elem)
# {1: 2, 2: 4, 3: 0, 4: 1, 5: 5, 6: 3}

答案 2 :(得分:0)

尝试一下:

for x in A:
  index = B.index(x)

这里的索引是每次迭代时的变量。

要保存在字典中:

indices = {}
for x in A:
  indices[x] = B.index(x)

答案 3 :(得分:0)

最简单的解决方案是

A = [1, 2, 3, 4, 5, 6]
B = [3, 4, 1, 6, 2, 5]
x= [B.index(i) for i in A]

#To store the result in a dictionary to map value and corresponding index.
a=dict(zip(A,x))