使用另一个列表中的重复项过滤列表

Filter list using duplicates in another list

我有两个等长列表,ab:

a = [1, 1, 2, 4, 5, 5, 5, 6, 1]
b = ['a','b','c','d','e','f','g','h', 'i']

我只想保留 b 中的那些元素,这些元素对应于 a 中首次出现的元素。预期结果:

result = ['a', 'c', 'd', 'e', 'h']

达到此结果的一种方法:

result = [each for index, each in enumerate(b) if a[index] not in a[:index]]
# result will be ['a', 'c', 'd', 'e', 'h']

另一种方式,调用 Pandas:

import pandas as pd
df = pd.DataFrame(dict(a=a,b=b))
result = list(df.b[~df.a.duplicated()])
# result will be ['a', 'c', 'd', 'e', 'h']

对于大型 ab 是否有更有效的方法?

如果速度更快,您可以试试:

firsts = {}
result = [firsts.setdefault(x, y) for x, y in zip(a, b) if x not in firsts]