使用另一个列表中的重复项过滤列表
Filter list using duplicates in another list
我有两个等长列表,a
和 b
:
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']
对于大型 a
和 b
是否有更有效的方法?
如果速度更快,您可以试试:
firsts = {}
result = [firsts.setdefault(x, y) for x, y in zip(a, b) if x not in firsts]
我有两个等长列表,a
和 b
:
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']
对于大型 a
和 b
是否有更有效的方法?
如果速度更快,您可以试试:
firsts = {}
result = [firsts.setdefault(x, y) for x, y in zip(a, b) if x not in firsts]