list1=['f','l','a','m','e','s'] #This is the predefined list
list2=['e','e','f','a','s','a'] #This is the list with repitition
x=list(set(list2)) # I want to remove duplicates
print(x)
我希望变量x
保留list1
所拥有的顺序。例如,如果在一个实例set(list2)
将输出生成为['e','f','a','s']
,我希望它生成['f','a','e','s']
(仅按照list1
的顺序)。
任何人都可以帮我这个吗?
答案 0 :(得分:1)
构建一个字典,将字符映射到list1
中的位置。使用其get
方法作为排序键。
>>> dict1 = dict(zip(list1, range(len(list1))))
>>> sorted(set(list2), key=dict1.get)
['f', 'a', 'e', 's']
答案 1 :(得分:0)
这是使用字典的一种方式:
list1=['f','l','a','m','e','s'] #This is the predefined list
list2=['e','e','f','a','s','a'] #This is the list with repitition
x=list(set(list2)) # I want to remove duplicates
d = {key:value for value, key in enumerate(list1)}
x.sort(key=d.get)
print(x)
# ['f', 'a', 'e', 's']
答案 2 :(得分:0)
来自index
类的方法list
可以完成这项工作:
sorted(set(list2), key=list1.index)
答案 3 :(得分:0)
什么是最好的通常取决于实际使用。有了这个问题,重要的是要知道列表的预期大小,以选择最有效的方法。如果我们保留了大部分字典,则以下查询运行良好,并且具有易于阅读的额外好处。
set2 = set(list2)
x = [i for i in list1 if i in set2]
如果不先将list2转换为集合,它也可以工作。但是,对于大型list2,这会运行得慢得多。