2016-08-16 163 views
0

返回匹配项的索引我有两个列表比较两个列表,并与蟒蛇

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中可能有多个匹配。

结果是

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

问候,

回答

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] 
+0

它不打印任何东西,它只是运行..哪里是打印命令?或结果保存在哪里? –

+0

@HamadHassan我只是给你演示从控制台。您可以执行'print([如果item中的d [item]中的项目在b中用于索引]]''在运行脚本之后查看结果。 – alecxe

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] 
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] 
>>>