我有两个列表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的大小都很大,因此这成为一个问题,我必须重复执行此过程。
关于如何使其更快的任何想法?任何建议,将不胜感激。
提前谢谢!
答案 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所说。