python快速获取较大列表中元素的索引,该列表也存在于较小列表中

时间:2018-12-14 07:18:17

标签: python list performance

我有两个列表A和B,列表B是列表A的子集

例如,

A = ['andy', 'john', 'frank', 'max', 'julia']

B = ['andy', 'max', 'julia']

,所需的输出是共享元素的列表A的索引,在这种情况下为

C = [0, 3, 4]

我想出的方法是使用两个for循环,它看起来像:

C = []

for bb in B:
   for aa in A:
      if bb == aa:
         C.append(A.index(aa))

但是,上述方法似乎效率很低,并且由于在我的实际应用中A和B的大小都很大,因此这成为一个问题,我必须重复执行此过程。

关于如何使其更快的任何想法?任何建议,将不胜感激。

提前谢谢!

1 个答案:

答案 0 :(得分:4)

使用list comprehension

>>> A = ['andy', 'john', 'frank', 'max', 'julia']
>>> B = ['andy', 'max', 'julia']
>>> [i for i,v in enumerate(A) if v in B]
[0, 3, 4]
>>> ]

或更高效,更短的list comprehension

>>> [A.index(i) for i in B]
[0, 3, 4]
>>> 

正如@Matthias的评论所提到的,您可以对第一个代码示例执行以下操作:

[i for i,v in enumerate(A) if v in set(B)]

为了更快,但也取决于列表的大小,如@Matthias所说。