使用 pandas,从列表中创建一个系列,删除重复项,然后将其转换回列表。
import pandas as pd
>>> pd.Series(['Herb', 'Alec', 'Herb', 'Don']).drop_duplicates().tolist()
['Herb', 'Alec', 'Don']
时间
@StefanPochmann 的解决方案显然是高重复列表的赢家。
my_list = ['Herb', 'Alec', 'Don'] * 10000
%timeit pd.Series(my_list).drop_duplicates().tolist()
# 100 loops, best of 3: 3.11 ms per loop
%timeit list(OrderedDict().fromkeys(my_list))
# 100 loops, best of 3: 16.1 ms per loop
%timeit sorted(set(my_list), key=my_list.index)
# 1000 loops, best of 3: 396 µs per loop
对于没有重复的较大列表(例如,只是一个数字范围),pandas 解决方案非常快。
my_list = range(10000)
%timeit pd.Series(my_list).drop_duplicates().tolist()
# 100 loops, best of 3: 3.16 ms per loop
%timeit list(OrderedDict().fromkeys(my_list))
# 100 loops, best of 3: 10.8 ms per loop
%timeit sorted(set(my_list), key=my_list.index)
# 1 loop, best of 3: 716 ms per loop