我正在尝试使用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
循环的方法。
答案 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))