我有两个列表
a = [1.1, 2.2, 5.6, 7.8,7.8, 8.6,10.2]
b = [2.2, 1.4, 1.99, 7.88, 7.8]
我希望比较两个列表以及参照列表a传递相同值的实体的索引。列表a中可以有多个匹配。
结果是
c= [1,3,4] # with reference to a as 2.2 occur at location 1, 7.8 at location 3 and 4.
我发现了一个类似的问题,但是如果没有捕获多个命中!并且第一个接受的答案不会打印索引!循环中没有打印。
compare two lists in python and return indices of matched values
的问候,
答案 0 :(得分:2)
您可以创建一个实用程序字典,将项目映射到a
列表中的位置列表:
>>> from collections import defaultdict
>>>
>>> a = [1.1, 2.2, 5.6, 7.8,7.8, 8.6,10.2]
>>> b = [2.2, 1.4, 1.99, 7.88, 7.8]
>>>
>>> d = defaultdict(list)
>>> for index, item in enumerate(a):
... d[item].append(index)
...
>>> [index for item in b for index in d[item] if item in d]
[1, 3, 4]
答案 1 :(得分:2)
其他答案的变体。我的第一个想法是将b
变成一个集合然后测试成员资格 - 集合适用于成员资格测试。
>>> a = [1.1, 2.2, 5.6, 7.8,7.8, 8.6,10.2]
>>> b = [2.2, 1.4, 1.99, 7.88, 7.8]
>>>
>>> b = set(b)
>>> c = [index for index, item in enumerate(a) if item in b]
>>> print(c)
[1, 3, 4]
>>>
答案 2 :(得分:0)
checker ={}
for i,item in enumerate(a):
checker[item] = checker.get(item,[]) +[i]
reduce(lambda x,y:x+y, [checker[i] for i in b if i in checker])
[1, 3, 4]